在mongo Shell中迭代游标
在本页面
方法返回一个游标。 要访问文档,您需要迭代游标。 但是,在mongo shell中,如果未使用var关键字将返回的游标分配给变量,则该游标将自动迭代多达20次,以打印结果中的前20个文档。
以下示例描述了手动迭代游标以访问文档或使用迭代器索引的方法。
您可以在shell程序中调用cursor变量以进行多达20次迭代并打印匹配的文档,如以下示例所示:
var myCursor = db.users.find( { type: 2 } );
myCursor
var myCursor = db.users.find( { type: 2 } );
while (myCursor.hasNext())
printjson(myCursor.next());
}
作为一种替代的打印操作,请考虑使用
printjson()
辅助方法替换print(tojson())
:var myCursor = db.users.find( { type: 2 } );
while (myCursor.hasNext()) {
printjson(myCursor.next());
}
var myCursor = db.users.find( { type: 2 } );
myCursor.forEach(printjson);
var myCursor = db.inventory.find( { type: 2 } );
var documentArray = myCursor.toArray();
var myDocument = documentArray[3];
考虑以下示例:
var myCursor = db.users.find( { type: 2 } );
var myDocument = myCursor[1];
**myCursor [1]**等效于以下示例:
myCursor.toArray() [1];
var myCursor = db.users.find().noCursorTimeout();
有关设置noCursorTimeout选项的信息,请参见驱动程序文档。
当游标返回文档时,其他操作可能会与查询交错。
3.4版中的新增功能:
find()
, aggregate()
, listIndexes
, 和 listCollections
类型的操作每批返回最多16 MB。 batchSize()
可以强制使用较小的限制,但不能强制使用较大的限制。对于包含不带索引的排序操作的查询,服务器必须在返回任何结果之前将所有文档加载到内存中以执行排序。
当您遍历游标并到达返回批处理的末尾时,如果还有更多结果,
cursor.next()
将执行getMore操作以检索下一个批处理。要查看在迭代游标时批处理中剩余多少文档,可以使用objsLeftInBatch()
方法,如以下示例所示:var myCursor = db.inventory.find();
var myFirstDocument = myCursor.hasNext() ? myCursor.next() : null;
myCursor.objsLeftInBatch();
- 自上次服务器重新启动以来超时的游标数
- “固定”打开游标的数量
- 打开的游标总数
db.serverStatus().metrics.cursor
结果是以下文档:
{
"timedOut" : <number>
"open" : {
"noTimeout" : <number>,
"pinned" : <number>,
"total" : <number>
}
}
另可参考:
译者:杨帅
校对:杨帅
最近更新 1yr ago