专家。
我是 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 ([对象数组],[对象对象])@src/mongo/shell/collection.js:866 @(外壳):7
未捕获的异常:聚合失败:{“errmsg”:“异常: 收到来自 mongo1.mscnet.com 的错误响应:27017: { $err: \“超出了 $group 的内存限制,但不允许外部排序。 通过allowDiskUse:true 选择加入。\", code: 16945 }", "code" : 16945, “好的”:0 }
仅供参考:我正在使用 Mongo 2.6
请在运行命令中使用聚合查询,它将允许使用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
}
)
如果您使用的是 m10 或更高版本 版本的 MongoDB Atlas,以下是针对
{allowDiskUse: true};
的修复
如果您通过猫鼬从应用程序访问数据,那么它应该是语法即函数。例如:
MongoDb 查询:
db.collection.user.aggregate([], {allowDiskUse: true})
与猫鼬:
User.aggregate([]).allowDiskUse(true);
这将解决应用程序中的错误:)
尝试这样写,
db.stocks.aggregate([
{ $project : { cusip: 1, date: 1, price: 1, _id: 0 } },
{ $sort : { cusip : 1, date: 1 } }
],
{
allowDiskUse: true
}
);
还有一件事,
关于最大文档大小的错误是 Mongo 固有的。 Mongo 永远无法返回大于 16 MB 的文档(或其数组)。我无法告诉您原因,因为您没有提到有关数据大小的任何内容,但这可能意味着您作为最终结果构建的文档太大。尝试减少 $limit 参数,也许?首先将其设置为 1,运行测试,然后增加它并查看执行此操作时结果有多大
郑重声明:如果您使用 MongoDB Atlas Free Tier 或 共享集群(M0、M2 和 M5)allowDiskUse 选项将被忽略