2016-10-03 71 views
2

我需要比較來自mongo db的兩個對象集合。 我的shell腳本是這樣的:forEach不會迭代mongodb中的所有集合

//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不能迭代所有項目以及如何解決它?

[UPDATE 1] i之後提到,如果我在Robomongo運行在剛打開的選項卡腳本它打印102點的元素,但是當我在同一標籤再次運行它只有12打印調查的一段時間。

[UPDATE 2] 我嘗試使用天然蒙戈殼mongo.exe運行腳本,並從印刷元件367得到100,沒有錯誤

回答

4

[更新]

它可能與超時有關。 Robomongo有15秒的默認超時時間,它在配置文件中,並且可以更改。這可能幫助:

[更新1]
從版本機器人3T開始 - 1.1(以前Robomongo),外殼超時是在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