forEach不会迭代mongodb

时间:2016-10-03 18:35:36

标签: javascript mongodb robo3t

我需要比较来自mongo db的两个对象集合。 我的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个项目。

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

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

为什么foreach可以迭代所有项目以及如何修复它?

[更新1] 经过一段时间的调查后,我提到如果我在Robomongo刚刚打开的标签中运行脚本,它会输出102个元素,但是当我在同一个标​​签中再次运行它时,它只打印12个。

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

1 个答案:

答案 0 :(得分:4)

[已更新]

可能与超时有关。 Robomongo默认超时为15秒,位于配置文件中,可以更改。这可能会有所帮助:

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

早于1.1版的解决方案:

  

确保Robomongo关闭。打开robomongo.json配置文件。

     

[更新]:为新版本添加Robomongo-Config-File-Guide链接。

atkbd
     
      
  1. 更改&#34; shellTimeoutSec&#34;属性值以秒为单位的更高数字。 (即&#34; shellTimeoutSec&#34;:60)
  2.   
  3. 保存配置文件并重新启动Robomongo app。
  4.   
  5. 运行必要的脚本。如果脚本没有完全执行,请尝试增加shellTimeoutSec值。
  6.   

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