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