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

在 mongosh 中迭代游标 mongosh

本教程演示如何访问权限 游标中的文档。

要访问游标中的文档,您可以手动迭代游标或使用toArray()方法。

本教程概述了如何:

  • 使用 let 关键字将游标保存为变量。

  • 使用next()hasNext()forEach() 方法访问权限游标中的文档。

  • toArray()使用 方法以大量形式返回并访问权限游标文档。

  • 安装 mongosh。

  • 连接到部署。

使用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" }
] )

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() 返回游标当前指向的文档,然后将游标向前移动到下一个文档。

let myCursor = db.users.find( { type: "user" } )
myCursor.next()
{
_id: 1,
type: 'user',
email: '[email protected]',
name: 'Test User 1'
}

游标方法 hasNext() 返回 truefalse,以指示游标中是否还有更多文档需要返回。

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()将辅助工具,例如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 游标方法驱动程序文档。

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)进行更改。

后退

Cursors

在此页面上