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 método toArray().

Este tutorial apresenta uma visão geral de como:

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

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

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

  • Instale o mongosh.

  • Conecte-se a uma implantação.

Use mongosh para inserir documentos em uma nova collection usando o banco de dados test 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" }
] )

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

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 palavra-chave let, 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 next() para acessar os documentos. next() 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 de 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 métodos hasNext() e next() para imprimir todos os documentos restantes do cursor usando o assistente printjson().

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 de cursor forEach() para aplicar um assistente, como printjson(), 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'
}

A partir da versão 2.1.0 do mongosh, você também pode usar loops for-of 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.

Em mongosh, use o método toArray() para iterar o cursor e retornar os documentos em uma 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 documentos 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 toArray() carrega todos os documentos retornados pelo cursor na RAM e esgota o cursor.

Alguns drivers fornecem acesso aos documentos usando um índice no cursor (ou seja, cursor[index]). Esse é um atalho para chamar primeiro o método toArray() e depois usar um índice na array 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 usar config.set("displayBatchSize") para alterar o número de documentos do valor padrão de 20.

Voltar

Cursors

Nesta página