2

RoboMongo (0.9.0-RC09) で次の mongo クエリを実行すると、(cursors count 関数を使用して) 正しい数のドキュメントが得られますが、すべてのドキュメントを反復してもドキュメントのごく一部しか返されません。

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

2 に答える 2

4

解決した問題: これは robomongoshellTimeoutSec構成の問題 (デフォルト: 15 秒) で、カーソルがそれ以上の要素を返さなくなりました。

これは、30 000 から 44 000 の「ランダムな」カウントについても説明しています (ネットワーク速度によって異なります)。ロボモゴのチケットはこちら: https://github.com/paralect/robomongo/issues/1106#issuecomment-230258348

現時点での修正/回避策はshellTimeoutSec、robomongo.jsonを増やすことです。

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
于 2016-09-27T08:00:26.970 に答える
-2

配列に変換する必要があります。その後は、forEach しか実行できません。以下を試してください!!!

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

// カーソルあり

db.getCollection('mycollection').find({}).forEach(function(doc){
count++;
print("IterCount : ",count);});
于 2016-09-27T07:03:53.190 に答える