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.
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 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 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() |
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' |
| } |