Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Cursors

Iterar un cursor en mongosh

Este tutorial demuestra cómo acceder a documentos en un cursor.

Para acceder a los documentos en un cursor, puede iterar manualmente el cursor o utilizar el toArray() método.

Este tutorial describe cómo:

  • Guarda un cursor como variable utilizando la palabra clave let.

  • Utilice los métodos,next() hasNext()y para acceder a los documentos en un cursor.forEach()

  • Regresa y accede a los documentos del cursor como una matriz con el toArray() método.

Utiliza mongosh para insertar documentos en una nueva colección utilizando la base de datos por defecto test:

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" }
] )

En mongosh, el cursor no se itera automáticamente cuando lo asignas a una variable usando la palabra clave let.

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

Puedes llamar a la variable del cursor en la consola para iterar hasta 20 veces [1] e imprimir los documentos coincidentes.

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

Si el cursor devuelto no se asigna a una variable usando la palabra clave let, entonces el cursor se itera automáticamente hasta el tamaño del lote [1], imprimiendo el primer 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'
}
]

También puede utilizar el método de cursor para acceder next() next() a los documentos. devuelve el documento al que apunta actualmente el cursor y luego mueve el cursor hacia el siguiente documento.

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

El método cursor hasNext() devuelve true o false para indicar si hay más documentos que se devolverán desde el cursor.

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

Puedes utilizar los métodos hasNext() y next() para imprimir todos los documentos restantes del cursor usando el asistente 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'
}

Del mismo modo, puedes utilizar el método de cursor forEach() para aplicar un asistente, como printjson(), a cada documento en el 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'
}

Comenzando en mongosh 2.1.0, también se pueden usar for-of bucles para iterar el cursor. El siguiente ejemplo devuelve los mismos resultados que el ejemplo 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'
}

Consulta Métodos de cursor de JavaScript y tu documentación del driver para obtener más información sobre los métodos de cursor.

En mongosh, utiliza el método toArray() para iterar el cursor y devolver los documentos en un arreglo.

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

Puedes acceder al arreglo resultante de documentos como a un arreglo 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'
}

El método toArray() carga todos los documentos devueltos por el cursor en la RAM y agota el cursor.

Algunos controladores proporcionan acceso a los documentos mediante un índice en el cursor (p. cursor[index] ej.,). Este método abreviado permite llamar primero al toArray() método y luego usar un índice en la matriz 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) Puede utilizar config.set("displayBatchSize") para cambiar la cantidad de documentos del valor predeterminado 20 de.

Volver

Cursors

En esta página