专家。
我是MongoDB的新手,但知道足以让我自己陷入困境......例如:
db.test.aggregate(
[
{$group: {_id: {email: "$email", gender: "$gender"}, cnt: {$sum: 1}}},
{$group: {_id: "$_id.email", cnt: {$sum: 1}}},
{$match: {cnt: 2}}
],
{allowDiskUse : true}
)
无论我尝试什么变化,我都会收到相同的错误("传递allowDiskUse:true以选择加入"):
错误("打印堆栈跟踪")@:0()@src / mongo / shell / utils.js:37 ([object Array],[object Object])@ src / mongo / shell / collection.js:866 @(壳):7
未捕获的异常:聚合失败:{" errmsg" :"例外: 收到来自mongo1.mscnet.com:27017的回复错误:{$ err: \"超出$ group的内存限制,但不允许外部排序。 通过allowDiskUse:true以选择加入。 \",代码:16945}","代码" :16945, " OK" :0 }
仅供参考:我使用的是Mongo 2.6
答案 0 :(得分:16)
请在运行命令中使用聚合查询,它将允许使用allowDiskUse标记。
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
}
)
答案 1 :(得分:6)
尝试这样写,
db.stocks.aggregate([
{ $project : { cusip: 1, date: 1, price: 1, _id: 0 } },
{ $sort : { cusip : 1, date: 1 } }
],
{
allowDiskUse: true
}
);
还有一件事,
关于最大文档大小的错误是Mongo固有的。 Mongo永远不会返回大于16兆字节的文档(或其数组)。我不能告诉你为什么,因为你没有提到任何关于数据大小的内容,但这可能意味着你作为最终结果构建的文档太大了。尝试减少$ limit参数,也许?首先将其设置为1,运行测试,然后增加测试,并查看执行此操作时结果的大小
答案 2 :(得分:0)
如果您使用的是 m10或更高版本的MongoDB Atlas,以下是{allowDiskUse: true};
的修复程序
如果您要通过猫鼬从应用程序访问数据,则它应为函数语法。例如:
MongoDb查询:
db.collection.user.aggregate([], {allowDiskUse: true})
猫鼬:
User.aggregate([]).allowDiskUse(true);
这将解决应用程序中的错误:)