2016-10-03 21 views
2

mongo dbのオブジェクトの2つのコレクションを比較する必要があります。 私のシェルスクリプトは次のようになります。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はエラーメッセージを表示しませんでした。私はforeachの内部

print(item); 

を使用する場合 は、すべてがうまく働いたと、すべての367個のオブジェクトが印刷されました。また、オブジェクトの比較にDeep Diffライブラリを使用しようとしましたが、同じ結果が得られました - 367の12項目しか印刷されませんでした。

私はメモリ消費量の問題だと思っていますが、どうやって処理するのか分かりませんし、Robomongoがエラーを表示しないのはなぜですか?

カーソルのみを反復しようとしましたが、役に立たなかった。

なぜforeachがすべてのアイテムを反復できないのか、それを修正する方法はありますか?

[UPDATE 1] 私はRobomongoでちょうど開いたタブでスクリプトを実行する場合、それは102の要素を出力しますが、私は同じタブで再びそれを実行したときに、それが唯一の12を出力することを言及した調査のいくつかの時間後。

[UPDATE 2]私はエラーなしで、ネイティブMongoのシェル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

関連する問題