Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ / /

Iterar um cursor em mongosh

Este tutorial demonstra como acessar documentos em um cursor.

Para acessar documentos em um cursor, você pode iterar manualmente o cursor ou usar o toArray() método.

Este tutorial descreve como:

  • Salve um cursor como uma variável usando a palavra-chave let.

  • Use os métodos next() hasNext(), e para acessar documentos em um cursor.forEach()

  • Retorne e acesse os documentos do cursor como uma array com o toArray() método.

  • Instale o mongosh.

  • Conecte-se a uma implantação.

Use para inserir documentos em uma nova collection usando mongosh o test banco de dados padrão :

db.users.insertMany( [
{ _id: 0, type: "admin", email: "admin@example.com", name: "Admin User" },
{ _id: 1, type: "user", email: "user1@example.com", name: "Test User 1" },
{ _id: 2, type: "user", email: "user2@example.com", name: "Test User 2" }
] )

Em , o cursor não itera automaticamente quando você o atribui a uma variável usando mongosh a let palavra-chave.

let myCursor = db.users.find( { type: "user" } )

Você pode chamar a variável do cursor no shell para iterar até 20 vezes []1 e imprimir os documentos correspondentes.

myCursor
[
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
},
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}
]

Se o cursor retornado não for atribuído a uma variável usando a let palavra-chave, o cursor será automaticamente iterado até o tamanho do lote []1 , imprimindo o primeiro lote de resultados.

db.users.find( { type: "user" } )
[
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
},
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}
]

Você também pode usar o método do cursor para next() next() acessar os documentos. retorna o documento que o cursor aponta atualmente e, em seguida, move o cursor para a frente para o próximo documento.

let myCursor = db.users.find( { type: "user" } )
myCursor.next()
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
}

O método do cursor hasNext() retorna true ou false para indicar se há mais documentos a serem retornados do cursor.

let myCursor = db.users.find( { type: "user" } )
myCursor.hasNext()
true

Você pode usar os hasNext() métodos e para imprimir todos os documentos restantes do cursor usando o next() printjson() assistente.

let myCursor = db.users.find( { type: "user" } )
while ( myCursor.hasNext() ) {
printjson( myCursor.next() )
}
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
}
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}

Da mesma forma, você pode usar o método do cursor para aplicar um forEach() assistente,printjson() como, a cada documento no cursor.

let myCursor = db.users.find( { type: "user" } )
myCursor.forEach( myDocument => printjson(myDocument) )
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
}
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}

Começando mongosh 2.1.0 em, você também pode usar for-of loops para iterar o cursor. O exemplo a seguir retorna os mesmos resultados do exemplo anterior .

let myCursor = db.users.find( { type: "user" } )
for ( let myDocument of myCursor ) {
printjson( myDocument )
}
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
}
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}

Consulte os métodos de cursor JavaScript e a documentação do driver para obter mais informações sobre os métodos de cursor.

mongoshEm, use o método para iterar o cursor e retornar os documentos em uma toArray() array.

let myCursor = db.users.find( { type: "user" } )
let documentArray = myCursor.toArray()
documentArray
[
{
_id: 1,
type: 'user',
email: 'user1@example.com',
name: 'Test User 1'
},
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}
]

Você pode acessar a array de documento resultante como uma array tradicional.

let myCursor = db.users.find( { type: "user" } )
let documentArray = myCursor.toArray()
documentArray[1]
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}

O método carrega todos os documentos retornados pelo cursor na RAM e esgota o toArray() cursor.

Alguns drivers fornecem acesso aos documentos usando um índice no cursor (oucursor[index] seja,). Ese é um atalho para chamar primeiro o método e depois usar um índice no array toArray() resultante.

let myCursor = db.users.find( { type: "user" } )
myCursor.toArray() [1]
{
_id: 2,
type: 'user',
email: 'user2@example.com',
name: 'Test User 2'
}
[1](1, 2) Você pode definir o atributo DBQuery.shellBatchSize para alterar o número de documentos do valor padrão de 20.

Voltar

Cursors

Nesta página