Mongo聚合结果超出了最大文档大小

12

我使用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}}});

然后MongoDB返回了:

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

总体来说是正确的,我在一个较小的集合上进行了测试,它可以正常工作,但生产集合大约有8千万个文档。当我尝试在8千万个文档上使用find()函数时,它可以正常工作,并要求您键入“it”以获取更多记录。为什么聚合功能没有这种能力?我还试图将limit()附加到聚合功能的末尾,但也无法正常工作。有任何解决方法吗?谢谢。

2个回答

10

我有2.6版本,但仍然出现这个错误。它已经被添加了吗? - jwillis0720
@jwillis0720 是的 http://docs.mongodb.org/manual/reference/operator/aggregation/out/ - Sammaye

0

我也遇到了同样的问题。在谷歌上搜索后,我发现可以使用Mongo中的runCommand来使用聚合,并将allowDiskUse选项设置为true,以将硬盘用作内存的扩展。 在此输入链接描述


1
如果聚合的结果(预计包含集合中所有重复的文档)超过了16MB(MongoDB文档的最大大小),那么这样做有什么帮助呢?这个错误与MongoDB内存不足无关。 - David Makogon
@ddb 我不明白你的评论。这个问题已经有一个被赞同和接受的答案了。Dagony发表的不是答案,因为它没有解决OP的问题。 - David Makogon
抱歉,我已删除此内容。 - ddb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接