R_U*_*ser 1 javascript iterator mongodb
我有一个包含 500 个文档的 MongoDB 表:
db.x.find().count()
现在我想遍历所有条目。不幸的是,下面的代码只给出49, 而不是500:
a=0; for (s in db.x.find()) { a++; }; print(a);
我已经将结果数量增加到1000:
DBQuery.shellBatchSize = 1000
但这并没有帮助。
当您使用在声明Java脚本,它可以迭代enumerable的特性Object。
db.x.find()  返回一个游标对象。的一些enumerable属性Cursor如下:
_mongo
_db
_collection
_ns
_query
_fields
_limit
_skip
_batchSize
_options
_cursor
_numReturned
_special help clone
_ensureSpecial
hasNext
map
forEach
总共有 a 的49这样的属性Cursor。这就是为什么无论迭代空集合还是包含 1000 多条记录的集合,结果总是得到 49 的原因。您正在迭代这些属性,而不是游标中的结果。
如果您注意到这些可枚举的属性,您可以在光标处找到hasNext, map,forEach函数properties。所以你需要利用这些属性来迭代游标。
要在 Cursor 中迭代结果:
var myCursor = db.x.find();
while (myCursor.hasNext()) {
   print(tojson(myCursor.next()));
}
或者,
db.x.find().forEach(function(i){
})
或者,
db.x.find().map(function(i){
...
})
第一个是首选和记录的方式。
| 归档时间: | 
 | 
| 查看次数: | 2363 次 | 
| 最近记录: |