【问题标题】:forEach doesn't iterate all collection in mongodbforEach 不会迭代 mongodb 中的所有集合
【发布时间】:2017-02-11 18:55:35
【问题描述】:

我需要比较来自 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 中的 12 个项目。

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

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

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

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

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

【问题讨论】:

    标签: javascript mongodb robo3t


    【解决方案1】:

    [更新]

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

    [Update-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 的链接。

    Windows
      0.9.x
      C:\Users\<user>\.config\robomongo\0.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. 将“shellTimeoutSec”属性值更改为更高的秒数。 (即“shellTimeoutSec”:60)
    2. 保存配置文件并重新启动 Robomongo 应用程序。
    3. 运行必要的脚本。如果脚本没有完全执行,请尝试增加 shellTimeoutSec 的值。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 2016-12-25
      • 2018-11-18
      • 2017-06-18
      • 1970-01-01
      • 2023-02-21
      • 2021-06-15
      相关资源
      最近更新 更多