本教程演示如何访问权限 游标中的文档。
关于此任务
要访问游标中的文档,您可以手动迭代游标或使用toArray()
方法。
本教程概述了如何:
开始之前
将文档插入到新集合中
使用mongosh
将文档插入到使用默认test
数据库的新集合中:
db.users.insertMany( [ { _id: 0, type: "admin", email: "[email protected]", name: "Admin User" }, { _id: 1, type: "user", email: "[email protected]", name: "Test User 1" }, { _id: 2, type: "user", email: "[email protected]", name: "Test User 2" } ] )
示例
保存游标与 let
在 mongosh
中,当您使用 let
关键字将游标赋值给一个变量时,游标不会自动迭代。
let myCursor = db.users.find( { type: "user" } )
您可以在Shell中调用游标变量进行最多迭代 次20 1[],并打印匹配的文档。
myCursor
[ { _id: 1, type: 'user', email: '[email protected]', name: 'Test User 1' }, { _id: 2, type: 'user', email: '[email protected]', name: 'Test User 2' } ]
如果返回的游标未使用let
关键字赋值给变量,则游标会自动迭代至批处理大小[1],并打印出第一批结果。
db.users.find( { type: "user" } )
[ { _id: 1, type: 'user', email: '[email protected]', name: 'Test User 1' }, { _id: 2, type: 'user', email: '[email protected]', name: 'Test User 2' } ]
访问游标中的文档 next()
还可以使用游标方法next()
访问权限文档。next()
返回游标当前指向的文档,然后将游标向前移动到下一个文档。
let myCursor = db.users.find( { type: "user" } ) myCursor.next()
{ _id: 1, type: 'user', email: '[email protected]', name: 'Test User 1' }
访问游标中的文档 hasNext()
游标方法 hasNext()
返回 true
或 false
,以指示游标中是否还有更多文档需要返回。
let myCursor = db.users.find( { type: "user" } ) myCursor.hasNext()
true
您可以使用 hasNext()
和 next()
方法,通过 printjson()
辅助工具打印游标中所有剩余的文档。
let myCursor = db.users.find( { type: "user" } ) while ( myCursor.hasNext() ) { printjson( myCursor.next() ) }
{ _id: 1, type: 'user', email: '[email protected]', name: 'Test User 1' } { _id: 2, type: 'user', email: '[email protected]', name: 'Test User 2' }
访问游标中的文档 forEach()
同样,您可以使用游标方法forEach()
将辅助工具,例如printjson()
,应用于游标中的每个文档。
let myCursor = db.users.find( { type: "user" } ) myCursor.forEach( myDocument => printjson(myDocument) )
{ _id: 1, type: 'user', email: '[email protected]', name: 'Test User 1' } { _id: 2, type: 'user', email: '[email protected]', name: 'Test User 2' }
从 mongosh
2.1.0 开始,您也可以使用 for-of
循环来迭代游标。以下示例返回与上一示例相同的结果。
let myCursor = db.users.find( { type: "user" } ) for ( let myDocument of myCursor ) { printjson( myDocument ) }
{ _id: 1, type: 'user', email: '[email protected]', name: 'Test User 1' } { _id: 2, type: 'user', email: '[email protected]', name: 'Test User 2' }
有关游标方法的更多信息,请参阅 JavaScript 游标方法和驱动程序文档。
访问游标中的文档 toArray()
在mongosh
中,使用toArray()
方法迭代游标并以大量返回文档。
let myCursor = db.users.find( { type: "user" } ) let documentArray = myCursor.toArray() documentArray
[ { _id: 1, type: 'user', email: '[email protected]', name: 'Test User 1' }, { _id: 2, type: 'user', email: '[email protected]', name: 'Test User 2' } ]
您可以将结果文档数组作为传统数组进行访问。
let myCursor = db.users.find( { type: "user" } ) let documentArray = myCursor.toArray() documentArray[1]
{ _id: 2, type: 'user', email: '[email protected]', name: 'Test User 2' }
toArray()
方法将游标返回的所有文档加载到 RAM 中并耗尽游标。
某些驱动程序通过在游标上使用索引来提供对文档的访问(即cursor[index]
)。这是对首先调用 toArray()
方法,然后在结果数组上使用索引的更快捷方式。
let myCursor = db.users.find( { type: "user" } ) myCursor.toArray() [1]
{ _id: 2, type: 'user', email: '[email protected]', name: 'Test User 2' }
[1] | ( 1, 2 )您可以通过设置 DBQuery.shellBatchSize 属性对文档数量(默认值为 20 )进行更改。 |