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 e imprimir los documentos coincidentes.
| [ |
| { |
| _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' |
| } |
| ] |
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() |
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' |
| } |