2

在 RoboMongo (0.9.0-RC09) 中运行以下 mongo 查询会给出正确数量的文档(使用游标计数函数),而迭代所有文档只会返回一小部分文档:

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 的“随机”计数(取决于网络速度)。这是 robomogo 的门票:https ://github.com/paralect/robomongo/issues/1106#issuecomment-230258348

目前的修复/解决方法是增加shellTimeoutSecrobomongo.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 回答