Este tutorial demonstra como acessar documentos em um cursor.
Sobre esta tarefa
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()eforEach()para acessar documentos em um cursor.Retorne e acesse os documentos do cursor como uma array com o método
toArray().
Tamanhos de lote
Um cursor retorna documentos em lotes. Por padrão, o mongosh exibe 20 documentos por iteração do cursor. Você pode usar config.set("displayBatchSize") para alterá-lo, se for muito ou pouco para suas necessidades.
Antes de começar
Instale o mongosh.
Conecte-se a uma implantação.
Inserir documentos em uma nova coleçã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" } ] )
Exemplos
Salvar um cursor com let
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 imprimir 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 , 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' } ]
Acesse documentos em um cursor com next()
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' }
Acesse documentos em um cursor com hasNext()
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' }
Acesse documentos em um cursor com forEach()
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.
Acesse documentos em um cursor com toArray()
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' }