我需要比较来自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个,没有错误
答案 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
- 更改&#34; shellTimeoutSec&#34;属性值以秒为单位的更高数字。 (即&#34; shellTimeoutSec&#34;:60)
- 保存配置文件并重新启动Robomongo app。
- 运行必要的脚本。如果脚本没有完全执行,请尝试增加shellTimeoutSec值。
醇>
参考: https://github.com/paralect/robomongo/issues/1106#issuecomment-230258348