forEach 不会迭代 mongodb 中的所有集合

forEach doesn't iterate all collection in mongodb

我需要比较来自 mongo 数据库的两个对象集合。 我的 shell 脚本如下所示:

//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 中执行这个脚本。 但我有一个问题。结果 367 个项目中只打印了 8 个项目。 Robomongo 没有显示任何错误信息。 当我使用

print(item);

在 foreach 内部,一切正常,打印了所有 367 个对象。我还尝试使用 Deep Diff 库进行对象比较,但得到了相同的结果——仅打印了 367 中的 12 项。

我认为是内存消耗的问题,但我不知道如何处理,以及为什么 Robomongo 不打印任何错误。

我试图只迭代游标,但没有帮助。

为什么 foreach 不能迭代所有项目以及如何解决它?

[更新 1] 经过一段时间的调查后,我提到如果我 运行 在 Robomongo 中刚刚打开的选项卡中编写脚本,它会打印 102 个元素,但是当我在同一个选项卡中再次 运行 它时,它只会打印12.

[更新 2] 我尝试使用本机 mongo shell mongo.exe 运行 脚本并从打印的 367 个元素中得到 100 个,没有错误

[已更新]

可能与超时有关。 Robomongo 在配置文件中有 15 秒的默认超时,可以更改。这可能有帮助:

[更新-1]
从版本 Robo 3T - 1.1(以前称为 Robomongo)开始,shell 超时可在 UI 上配置,并且还有一个修复程序可以防止此问题发生。看 http://blog.robomongo.org/robomongo-is-robo-3t/#4a。所以不需要像下面解释的那样为旧版本更改配置文件。

1.1 之前版本的解决方案:

Make sure Robomongo is closed. Open robomongo.json configuration file.

[Update]: Adding link to Robomongo-Config-File-Guide for newer versions.

Windows
  0.9.x
  C:\Users\<user>\.config\robomongo[=10=].9\robomongo.json
  0.8.x
  C:\Users\<user>\.config\robomongo\robomongo.json   
MAC
    0.9.x
    /Users/<user>/.config/robomongo/0.9/robomongo.json
    0.8.x
   /Users/<user>/.config/robomongo/robomongo.json     
Linux
    0.9.x
    /home/<user>/.config/robomongo/0.9/robomongo.json
    0.8.x
    /home/<user>/.config/robomongo/robomongo.json
  1. Change "shellTimeoutSec" attribute value to higher number in seconds. (i.e. "shellTimeoutSec" : 60)
  2. Save config file and re-launch Robomongo app.
  3. Run necessary script. If script isn't executed entirely, try to increase shellTimeoutSec value.

参考: https://github.com/paralect/robomongo/issues/1106#issuecomment-230258348