在 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];