mongo聚合结果超过最大文档大小

use*_*587 11 mongodb aggregation-framework

我使用mongo聚合函数来查找集合中的重复文档,其中集合如下所示:

{_id, placement_id, placement_name, program_id, target}
Run Code Online (Sandbox Code Playgroud)

我需要找到除_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:"-"}
Run Code Online (Sandbox Code Playgroud)

我想出的集合函数是:

db.placements.aggregate({$group:{_id:{placement_name:"$placement_name", program_id:"$program_id", target:"$target"}, total:{$sum:1}}},{$match:{total:{$gte:2}}});
Run Code Online (Sandbox Code Playgroud)

然后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
Run Code Online (Sandbox Code Playgroud)

聚合是正确的,我在较小的集合上测试它并且它工作正常,但生产集合有大约80M文档.我想知道在80M文档上尝试find()函数时,它可以工作并要求你输入'it'来获取更多记录.为什么聚合函数没有这个功能呢?我还尝试将limit()附加到聚合函数的末尾,但它也不起作用.有什么工作吗?谢谢.

Sam*_*aye 9

聚合函数怎么没有这个功能呢?

它确实在2.6中即将推出.

我也尝试将limit()附加到聚合函数的末尾,它也不起作用.任何工作?

$limit聚合框架有一个运算符:http://docs.mongodb.org/manual/reference/operator/aggregation/limit/