Este tutorial demuestra cómo acceder a documentos en un cursor.
Acerca de esta tarea
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(), yforEach()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().
Tamaños de lote
Un cursor devuelve documentos en lotes. Por defecto, mongosh muestra 20 documentos por iteración del cursor. Puedes usar Utiliceconfig.set("displayBatchSize") para cambiarlo, si este valor es demasiado grande o demasiado pequeño para sus necesidades.
Antes de comenzar
Install mongosh.
Conéctate a una implementación.
Insertar documentos en una nueva colecció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" } ] )
Ejemplos
Guardar un cursor con let
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 cursor en la consola para 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, 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' } ]
Acceder a documentos en un cursor con next()
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' }
Acceder a documentos en un cursor con hasNext()
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' }
Acceder a documentos en un cursor con forEach()
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.
Acceder a documentos en un cursor con toArray()
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' }