MongoDB allowDiskUse not working..

aggregation-frameworkmapreducemongodb

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

Best Answer

Please use aggregate query in run command,it will allow to use allowDiskUse tag.

db.runCommand(
   { aggregate: "test",
     pipeline: [
                {$group: {_id: {email: "$email", gender: "$gender"}, cnt: {$sum: 1}}}, 
                {$group: {_id: "$_id.email", cnt: {$sum: 1}}}, 
                {$match: {cnt: 2}}
               ],
     allowDiskUse: true
   }
)
Related Topic