如何正确遍历 MongoDB-Shell 中的搜索结果?
How to correctly iterate through a search result in MongoDB-Shell?
我有一个 MongoDB table 包含 500 个文档:
db.x.find().count()
现在我想遍历所有条目。不幸的是,下面的代码只给出 49
,而不是 500
:
a=0; for (s in db.x.find()) { a++; }; print(a);
我已经将结果数增加到 1000
:
DBQuery.shellBatchSize = 1000
但这并没有帮助。
当您在 java 脚本中使用 for in 语句时,它会迭代 Object
.
的 enumerable
属性
db.x.find()
returns你一个cursor对象。
Cursor
的一些 enumerable
属性如下:
_mongo
_db
_collection
_ns
_query
_fields
_limit
_skip
_batchSize
_options
_cursor
_numReturned
_special help clone
_ensureSpecial
hasNext
map
forEach
总共有49
个Cursor
这样的属性。这就是为什么无论您迭代空集合还是包含超过 1000 条记录的集合,结果总是得到 49。您正在迭代这些属性而不是游标中的结果。
如果您注意到这些可枚举的属性,您会发现 hasNext
、map
、forEach
的功能与游标的 properties
相同。所以你需要利用这些属性来迭代游标。
到iterate 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){
...
})
第一种是首选的记录方式。
我有一个 MongoDB table 包含 500 个文档:
db.x.find().count()
现在我想遍历所有条目。不幸的是,下面的代码只给出 49
,而不是 500
:
a=0; for (s in db.x.find()) { a++; }; print(a);
我已经将结果数增加到 1000
:
DBQuery.shellBatchSize = 1000
但这并没有帮助。
当您在 java 脚本中使用 for in 语句时,它会迭代 Object
.
enumerable
属性
db.x.find()
returns你一个cursor对象。
Cursor
的一些 enumerable
属性如下:
_mongo
_db
_collection
_ns
_query
_fields
_limit
_skip
_batchSize
_options
_cursor
_numReturned
_special help clone
_ensureSpecial
hasNext
map
forEach
总共有49
个Cursor
这样的属性。这就是为什么无论您迭代空集合还是包含超过 1000 条记录的集合,结果总是得到 49。您正在迭代这些属性而不是游标中的结果。
如果您注意到这些可枚举的属性,您会发现 hasNext
、map
、forEach
的功能与游标的 properties
相同。所以你需要利用这些属性来迭代游标。
到iterate 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){
...
})
第一种是首选的记录方式。