2016-09-27 9 views
2

RoboMongo(0.9.0-RC09)で次のmongoクエリを実行すると、カーソルカウント関数を使用して正しい数のドキュメントが得られますが、すべてのドキュメントを反復すると、 :MongoDBカーソルがすべてのドキュメントを返さない

var allDocuments = db.getCollection('mycollection').find({}); 
print(allDocuments.size()); // prints 170 000 -> correct 

var count = 0; 
allDocuments.forEach(function(doc) { 
    count++; 
}); 
print(count); // 'randomly' prints values between 30 000 and 44 000 

我々は、特にクエリがすべてのドキュメントを返すように設定する必要がありますか?

答えて

4

var allDocuments = db.getCollection('mycollection').find({}).toArray(); 
print(allDocuments.length); 
var count = 0; 
allDocuments.forEach(function(doc) { 
count++; 
print("IterCount : ",count); 
}); 
print("FinalCount : ",count); 

//解決される問題:カーソルがより多くの要素を返す停止させた: これはrobomongo shellTimeoutSec設定(15秒デフォルト)の問題です。

これは、(ネットワークの速度に応じて)30,000〜44,000の「ランダム」カウントについても説明しています。ここで がrobomogoのチケットです:https://github.com/paralect/robomongo/issues/1106#issuecomment-230258348

今の修正/回避策はrobomongo.jsonでshellTimeoutSecを高めることである。

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 
+0

オハイオ州、私はそれを見つけた、thx神。 –

+0

ありがとう!すべてのアップデートが完了しているわけではないが、診断/警告はありませんでした。 – randomsock

-1

配列に変換する必要があります。その後、私たちはそれぞれのためにできるのです。 以下を試してみてください!カーソル

db.getCollection('mycollection').find({}).forEach(function(doc){ 
count++; 
print("IterCount : ",count);}); 
+0

forEachのは、カーソルの上に定義され、HTTPSで文書として、動作するはずです:/ /docs.mongodb.com/manual/reference/method/cursor.forEach/(私たちはmongodb 3.2.6を使用します) – hupfis

+0

この提案は、すべてのデータをメモリにロードします。必ずしも良い考えではありません。 – qqilihq

+0

こんにちはHupfis!操作が完了するとカーソルは直ちに閉じます。これはカーソルが閉じた後に動作します。結果を得ることができません。私が試した答えを編集します。 –

関連する問題