我使用mongo聚合函数来查找集合中的重复文档,其中集合如下所示:
{_id, placement_id, placement_name, program_id, target}
我需要查找除_id和placement_id之外具有完全相同字段的所有文档, 所以这两个文件是一样的:
{_id:3, placement_id:23, placement_name:"pl1", program_id:5, target:"-"}
{_id:7, placement_id:55, placement_name:"pl1", program_id:5, target:"-"}
我想出的综合功能是:
db.placements.aggregate({$group:{_id:{placement_name:"$placement_name", program_id:"$program_id", target:"$target"}, total:{$sum:1}}},{$match:{total:{$gte:2}}});
然后mongo回来了:
Error: Printing Stack Trace
at printStackTrace (src/mongo/shell/utils.js:37:15)
at DBCollection.aggregate (src/mongo/shell/collection.js:897:9)
at (shell):1:15
Wed Apr 2 07:43:23.090 aggregate failed: {
"errmsg" : "exception: aggregation result exceeds maximum document size (16MB)",
"code" : 16389,
"ok" : 0
} at src/mongo/shell/collection.js:898
聚合是正确的,我在较小的集合上测试它并且它工作正常,但生产集合有大约80M文档。我想知道在80M文档上尝试find()函数时,它可以工作并要求你输入'it'来获取更多记录。为什么聚合函数没有这个功能呢?我还尝试将limit()附加到聚合函数的末尾,但它也不起作用。有什么工作吗?感谢。
答案 0 :(得分:9)
聚合函数怎么没有这个功能?
它在2.6中会很快出现。
我还尝试将limit()附加到聚合函数的末尾,它也不起作用。任何解决方法?
聚合框架有$limit
运算符:http://docs.mongodb.org/manual/reference/operator/aggregation/limit/
答案 1 :(得分:0)
我遇到了同样的问题。在谷歌搜索后,我发现你可以使用Mongo中的runCommand来使用聚合并将allowDiskUse选项设置为true,以将硬盘驱动器用作内存的扩展。 enter link description here