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

时间:2014-04-02 15:24:01

标签: mongodb aggregation-framework

我使用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()附加到聚合函数的末尾,但它也不起作用。有什么工作吗?感谢。

2 个答案:

答案 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