Беря идеи Берги, мы индексируем документы по id, чтобы избежать необходимости находить дорогие индексы:
var allDocs =[345,000 objects]
var aggregationRes =[46,000 objects]
var allDocsIndexed = {};
allDocs.forEach(function(doc){
allDocsIndexed[doc._id.toString()] = doc;
});
aggregationRes.forEach(function (resElem, counter) {
allDocsIndexed[resElem.dups[0]].properties = resElem.dupsProp;
for (var i = 1; i < resElem.dupsProp.length; i++) {
delete allDocsIndexed[resElem.dupsProp[i]];
}
});
var allUndeletedDocs = allDocs.filter(doc => allDocsIndexed.hasOwnProperty(doc_id.toString()));
Обратите внимание, что для javascript это эффективное решение, но с более подробной информацией может быть лучше, используя функции mongodb.