Docs 菜单
Docs 主页
/
数据库手册
/ / /

在 mongosh 中迭代游标 mongosh

db.collection.find() 方法将返回一个游标。要访问文档,需要迭代游标。但是,在 mongosh 中,如果未使用 var 关键字将返回的游标分配给变量,则游标会自动迭代多达 20 次 [1],最多可在结果中输出前 20 个文档。

以下示例描述了如何通过手动迭代游标,或使用迭代器索引以访问文档。

mongosh 中,使用 var 关键字将从 find() 方法返回的游标赋值给变量时,游标不会自动迭代。

可以在 shell 中调用游标变量来迭代多达 20 次 [1] 并打印匹配文档,如以下示例所示:

var myCursor = db.users.find( { type: 2 } );
myCursor

也可以使用游标方法 next() 访问文档,如下例所示:

var myCursor = db.users.find( { type: 2 } );
while (myCursor.hasNext()) {
print(tojson(myCursor.next()));
}

可以考虑使用 printjson() 辅助方法来替换 print(tojson()),作为替代打印操作:

var myCursor = db.users.find( { type: 2 } );
while (myCursor.hasNext()) {
printjson(myCursor.next());
}

可以使用游标方法 forEach() 来迭代游标并访问文档,如以下示例所示:

var myCursor = db.users.find( { type: 2 } );
myCursor.forEach(printjson);

有关游标方法的更多信息,请参阅 JavaScript 游标方法驱动程序文档。

[1]( 1, 2 )您可以通过设置 DBQuery.shellBatchSize 属性对文档数量(默认值为 20)进行更改。

mongosh 中,可以使用 toArray() 方法遍历游标,并以数组形式返回文档,如下所示:

var myCursor = db.inventory.find( { type: 2 } );
var documentArray = myCursor.toArray();
var myDocument = documentArray[3];

toArray() 方法会将游标返回的所有文档加载到 RAM 中;toArray() 方法会耗尽游标。

此外,一些驱动程序使用游标上的索引(即cursor[index])。这是对首先调用 toArray() 方法,然后在结果数组上使用索引的更快捷方式。

考虑以下示例:

var myCursor = db.users.find( { type: 2 } );
var myDocument = myCursor[1];

myCursor[1] 等效于以下示例:

myCursor.toArray() [1];

后退

Cursors

在此页面上