Experts.
I'm new to MongoDB, but know enough to get my self in trouble.. case in point:
db.test.aggregate(
[
{$group: {_id: {email: "$email", gender: "$gender"}, cnt: {$sum: 1}}},
{$group: {_id: "$_id.email", cnt: {$sum: 1}}},
{$match: {cnt: 2}}
],
{allowDiskUse : true}
)
and no matter what variations I try, I keep getting the same error ("Pass allowDiskUse:true to opt in"):
Error("Printing Stack Trace")@:0 ()@src/mongo/shell/utils.js:37 ([object Array],[object Object])@src/mongo/shell/collection.js:866 @(shell):7
uncaught exception: aggregate failed: { "errmsg" : "exception: Received error in response from mongo1.mscnet.com:27017: { $err: \"Exceeded memory limit for $group, but didn't allow external sort. Pass allowDiskUse:true to opt in.\", code: 16945 }", "code" : 16945, "ok" : 0 }
FYI: I'm using Mongo 2.6
version()
return in themongo
shell? Also, are you using any shell extensions such as Mongo-Hacker? If so, I would try starting the shell usingmongo --norc
to test without extensions. Your syntax looks correct so I'm suspecting you may inadvertently be using a version of theaggregate()
helper that does not support passing options to the aggregation command (which were added in the MongoDB 2.6 shell). – Stenniemongo
shell or Robomongo provideaggregate()
helpers to make it more convenient to work with the underlyingaggregate
command that runs on your MongoDB server. In versions of MongoDB prior to 2.6 the aggregate command did not support any options so older versions of theaggregate()
helpers will ignore those. If--norc
works for themongo
shell I suspect you have an older version of Mongo-Hacker (I committed a fix in August 2014) – Stenniemongo
shell helpers just manipulate parameters before sending the command to the server (for example, allowing you to pass an aggregation pipeline as either an array or a list of pipeline steps). FYI, you can see the helper code in themongo
shell by invoking without the (), eg:db.test.aggregate
– Stennie