我使用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()附加到聚合功能的末尾,但也无法正常工作。有任何解决方法吗?谢谢。