Я использую функцию агрегации 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
агрегат верен, я тестировал его на меньшую коллекцию, и он отлично работает, но в сборнике имеется около 80 миллионов документов. Мне было интересно, когда вы пытаетесь найти функцию find() на 80M-документах, она работает и просит вас ввести "it" для большего количества записей. Почему совокупная функция не имеет такой возможности? Я также попытался добавить limit() в конец функции aggregate, но он не будет работать. Любая работа вокруг? Спасибо.