Docs Menu
Docs Home
/ /

Iterar un cursor en mongosh

Este tutorial demuestra cómo acceder a los 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:

  • Guarde un cursor como una variable usando 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.

  • Instalar mangosta.

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

mongoshEn, el cursor no itera automáticamente cuando lo asigna a una variable usando la let palabra clave.

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

Puede llamar a la variable del cursor en el shell 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 del cursor hasNext() devuelve true o false para indicar si hay más documentos que devolver desde el cursor.

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

Puede utilizar los hasNext() métodos y para imprimir todos los documentos restantes desde el cursor utilizando el next() printjson() ayudante.

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

De manera similar, puede utilizar el método de cursor para aplicar un forEach() ayudante,printjson() como, 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'
}

A partir mongosh 2.1.0 de, también puede usar for-of bucles para iterar el cursor. El siguiente ejemplo devuelve los mismos resultados que el 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 los métodos de cursor de JavaScript y la documentación de su controlador para obtener más información sobre los métodos de cursor.

mongoshEn, utilice el método para iterar el cursor y devolver los documentos en una toArray() matriz.

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

Puede acceder a la matriz de documentos resultante como una matriz 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 carga todos los documentos devueltos por el cursor en la RAM y agota el toArray() 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