Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /

Iterar un cursor en mongosh

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

Para acceder a documentos en un cursor, puedes iterar manualmente el cursor o usar el método toArray().

Este tutorial proporciona una visión general sobre cómo:

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

  • Utiliza los métodos next(), hasNext(), y forEach() para acceder a los documentos dentro de un cursor.

  • Devuelve y accede a los documentos del cursor como un arreglo usando el método toArray().

  • Instalar mongosh.

  • Conéctate a una implementación.

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 puedes usar el método next() del cursor para acceder a los documentos. next() devuelve el documento que apunta el cursor actualmente y, a continuación, mueve el cursor hacia adelante al documento siguiente.

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 utilizando un índice en el cursor (es decir, cursor[index]). Este es un atajo para llamar primero al método toArray() y luego usar un índice en el arreglo 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) Puedes usar config.set("displayBatchSize") para cambiar el número de documentos del valor por defecto de 20.

Volver

Cursors

En esta página