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().
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 e imprimir os documentos correspondentes.
| [ |
| { |
| _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' |
| } |
| ] |
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() |
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' |
| } |