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' |
} |