Мне нужно сравнить две коллекции объектов из mongo db. Мой сценарий оболочки выглядит так:
//Both arrays have 367 pretty big objects.
var list1 = db.collection1.find({..condition..}).toArray();
var list2 = db.collection2.find({..condition..}).toArray();
function compare(left, right){
var l = left.data.NP;
var r = right.data.NP;
if(JSON.stringify(l) === JSON.stringify(r)){
return 'Equal';
} else {
return 'Not equal';
}
}
list1.forEach(function(item, index){
print(index, compare(item,list2[index]));
})
Я выполняю этот скрипт в Robomongo. Но у меня есть проблема. В результате было напечатано только 8 экземпляров из 367. Robomongo не показывал никаких сообщений об ошибках. когда я использовал
print(item);
внутри foreach все работало нормально, и все 367 объектов были напечатаны. Также я пытался использовать библиотеку Deep Diff для сравнения объектов, но получил тот же результат - было напечатано только 12 элементов из 367.
Я думаю проблема в потреблении памяти, но я не знаю как с этим справиться, и почему Robomongo не выводит никаких ошибок.
Я пытался перебирать только курсоры, но это не помогло.
Почему foreach может перебирать не все элементы и как это исправить?
[ОБНОВЛЕНИЕ 1] После некоторого времени расследования я упомянул, что если я запускаю скрипт на только что открытой вкладке в Robomongo, он печатает 102 элемента, но когда я снова запускаю его на той же вкладке, он печатает только 12.
[ОБНОВЛЕНИЕ 2] Я попытался запустить скрипт, используя собственную оболочку mongo mongo.exe, и получил 100 из 367 напечатанных элементов без ошибок.