Cursores MongoDB

En MongoDB, cuando se usa el método find() para encontrar los documentos presentes en la colección dada, este método devuelve un puntero que apunta a los documentos de la colección, ahora este puntero se conoce como cursor. O dicho de otro modo podemos decir que un cursor es un puntero , y usando este puntero podemos acceder al documento. De forma predeterminada, el cursor itera automáticamente, pero puede iterar un cursor manualmente, lo que discutiremos más adelante. 

Ejemplo: En este ejemplo, estamos trabajando con:

Base de datos: gfg

Colección: estudiante

Documentos: Tres documentos contienen los detalles de los estudiantes

Aquí, usamos la siguiente consulta para mostrar todos los documentos presentes en la colección del estudiante

db.student.find().pretty()

Este método find() devuelve un cursor que contiene todos los documentos presentes en la colección del estudiante.

Iterando manualmente un cursor

En MongoDB, el método find() devuelve el cursor, ahora para acceder al documento necesitamos iterar el cursor. En el shell mongo, si el cursor no está asignado a una palabra clave var, el shell mongo itera automáticamente el cursor hasta 20 documentos. MongoDB también le permite iterar el cursor manualmente. Entonces, para iterar un cursor manualmente, simplemente asigne el retorno del cursor mediante el método find() a la palabra clave var o variable de JavaScript. 

Nota: Si un cursor está inactivo durante 10 minutos, el servidor MongoDB cerrará automáticamente ese cursor.

Sintaxis:

var nombre = db.nombre_de_la_colección.find()

nombre

Ejemplo :

var mycursor = db.student.find({studentId:3}).pretty()
mycursor

Aquí, iteramos el cursor manualmente para encontrar el documento cuyo ID de estudiante es 3. Entonces, asignamos el cursor devuelto por el método find() a la variable de JavaScript (es decir, mycursor).

Usando el método next():

También podemos usar el método de cursor next() para acceder al siguiente documento. Analicemos con la ayuda de un ejemplo:

Ejemplo:

var mycursor = db.student.find({studentId:{$gt:1}});
> while(mycursor.hasNext()){
... print(tojson(mycursor.next()));
... }

En este ejemplo, se muestran los documentos Id. de estudiante 2 y 3 porque en la primera línea tomamos exclusivamente el cursor para comenzar con Id. de estudiante > 1. Por lo tanto, omitió el primer documento y recuperó los documentos restantes. Aquí, se usa el método print(tojson()) para mostrar el resultado. También puede usar el método printjson() para mostrar el resultado.

Usando el método forEach():

También podemos usar el método forEach() para iterar el cursor. Esta función aplica una función JavaScript a cada documento desde el cursor.

Sintaxis:

db.collection.find().forEach(<función>)

Ejemplo:

var mycursor = db.student.find({studentId:3}).pretty()
mycursor.forEach(printjson)

Aquí, primero almacenamos el cursor devuelto por el método find() (es decir, studentId:3) en la variable mycursor. Ahora, usamos el método forEach() para iterar el cursor y mostrar el documento resultante usando printjson.

Índice de iteradores:

En Mongo Shell, puede iterar el cursor y mostrar el documento resultante en la array utilizando el método toArray().

Sintaxis:

cursor.toArray()

Ejemplo:

var mycursor = db.student.find().pretty()
var docs = mycursor.toArray()
var resultdoc = docs[0]
resultdoc

Aquí, primero asignamos el cursor devuelto a la palabra clave var (es decir, mycursor), a continuación creamos una array a partir del cursor resultante usando el método toArray() y asignamos el resultado a la palabra clave var (es decir, docs). Ahora accedemos a los documentos según su índice, por ejemplo, var resultdoc = docs[0], aquí mostramos un documento cuyo índice es 0.

Metodo alternativo:

También puede usar este método para acceder a un documento usando el índice en el cursor.  

var mycursor = db.student.find().pretty()
var resultdoc = mycursor[0]
resultdoc

Métodos comúnmente utilizados

A continuación se muestran los métodos de cursor comúnmente utilizados:

Contar cursor:

Para obtener los documentos correctos, necesitamos saber cuántos documentos hay presentes para esa colección. Para obtener eso, podemos usar el método count() que devuelve el número total de documentos presentes en la colección dada.

Sintaxis:

db.nombre_de_la_colección.find().count()

db.nombre_de_la_colección.count()

Ejemplo: 

db.student.find().count()

Aquí encontramos el número total de documentos presentes en la colección del estudiante usando el método count().

Límite de cursores:

El método limit() ayuda a obtener registros limitados de una colección. Supongamos que tenemos varios documentos, pero queremos tener los primeros o solo 2 documentos, luego, al usar el método limit(), podemos lograrlo.

Sintaxis:

db.nombre_de_la_colección.find().limit(<número>)

Ejemplo:

db.student.find().limit(2).pretty()

Aquí, solo mostramos los dos primeros documentos de la colección de estudiantes.

Tamaño del cursor:

El método cursor.size() será útil para devolver un recuento de la cantidad de documentos que se obtuvieron como resultado de la consulta db.collection.find() después de aplicar cualquier método cursor.skip() y cursor.limit(). Básicamente, filtrará por la condición dada y encontrará el tamaño del cursor. Por lo tanto, se menciona que ha aplicado los métodos cursor.skip() y cursor.limit().

Sintaxis:

db.nombre_de_la_colección.buscar().tamaño()

Ejemplo:

db.student.find({studentId:1}).size()

Clasificación de cursores:

Por lo general, durante la verificación de documentos, si la salida está ordenada, ya sea en orden ascendente o descendente, será más fácil. Así que usamos el método sort() para ordenar los documentos. Si desea ordenar los documentos en forma ascendente, luego configure el valor del campo en 1 y en forma descendente, luego configure -1.

Sintaxis:

db.nombre_de_la_colección.find().sort(<ordenar>)

Ejemplo:

db.student.find().sort({studentId:-1}).pretty()

Aquí, ordenamos todos los documentos presentes en la colección de estudiantes en orden descendente.

Cursor.toArray():

Para tener una array que contenga todos los documentos devueltos por el cursor, podemos usar el método toArray().

Sintaxis:

db.nombre_de_la_colección.find().toArray()

Ejemplo:

db.student.find().toArray()

Cursor.siguiente:

El método next() se usa para devolver el siguiente documento en un cursor. Por lo general, devolverá el primer documento, ya que será el resultado del primer documento en el cursor.

Sintaxis:

db.student.find().next()

Ejemplo:

db.student.find().next()

Aquí, el método next() devuelve el primer documento de la colección.

Método de cursores

Los métodos de cursor modifican la forma en que se ejecuta la consulta subyacente.

Nombre del método Descripción
cursor.addOption() Este método se utiliza para agregar indicadores de protocolo de conexión especiales y modificar el comportamiento de la consulta. 
cursor.allowDiskUse() Este método permite que MongoDB use archivos temporales en el disco para almacenar datos que excedan el límite de memoria del sistema de 100 megabytes mientras procesa una operación de ordenación por bloqueo.
cursor.permitirResultadosParciales() Este método permite que la operación find() contra una colección devuelva resultados parciales, en lugar de un error si uno o más fragmentos consultados no están disponibles.
cursor.batchSize()  Este método se utiliza para controlar la cantidad de documentos que MongoDB devolverá al cliente en un solo mensaje de red.
cursor.cerrar() Este método se utiliza para cerrar un cursor y liberar los recursos del servidor asociado. 
cursor.estáCerrado() Este método se usa para devolver verdadero si el cursor está cerrado.  
cursor.collation() Este método se utiliza para especificar la intercalación del cursor que devuelve el método find().
cursor.comentario() Este método se usa para adjuntar un comentario a la consulta para permitir la trazabilidad en los registros y la colección system.profile.
cursor.explain() Este método se utiliza para informar sobre el plan de ejecución de consultas para un cursor.
cursor.forEach() Esta función se utiliza para aplicar una función de JavaScript para cada documento presente en el cursor.
cursor.hasNext() Este método devuelve verdadero si el cursor tiene más documentos y se puede iterar.
cursor.pista() Este método obliga a MongoDB a usar un índice específico para una consulta.
cursor.isExhausted() Cuando el cursor está cerrado y no quedan objetos en el lote, este método devuelve verdadero
cursor.itcount() cursor.count() e itcount() son solo similares. En itcount(), ejecución sobre un iterador existente, agotando su contenido en el proceso.
cursor.mapa() La salida está disponible en una array al aplicar una función a cada documento en un cursor.
cursor.max() Este método se utiliza para especificar un límite de índice superior exclusivo para el cursor.
cursor.maxTimeMS() Este método se utiliza para especificar el límite de tiempo acumulativo en el límite de tiempo acumulativo en milisegundos para operaciones en un cursor.
cursor.min() Este método se utiliza para especificar un límite de índice inferior inclusivo para un cursor.
cursor.siguiente() Este método se utiliza para recuperar el siguiente documento en un cursor.
cursor.noCursorTimeout()
cursor.objsLeftInBatch() Este método se utiliza para encontrar el número de documentos que quedan en el lote de cursor actual.
cursor.bonita() Este método se utiliza para mostrar los resultados de una manera fácil de leer.
cursor.readPreocupación() Se especifica un problema de lectura para una operación find().
cursor.readPref() Este método especificó una preferencia de lectura para un cursor para controlar cómo el cliente dirige las consultas a un conjunto de réplicas.
cursor.returnKey() Por lo general, el cursor resultante de la operación find() proporciona documentos, mientras que returnkey() modifica el cursor y devuelve claves de índice
cursor.showRecordId() Este método agrega un campo de ID de motor de almacenamiento interno que devuelve el cursor.
cursor.skip() Durante la visualización de documentos, es posible que necesitemos omitir algunos documentos debido a varias razones. Durante ese tiempo, skip() ayuda a mostrar los resultados después de omitir una serie de documentos.
cursor.tailable() El método marcado como rastreable con los cursores de colecciones limitadas.

Publicación traducida automáticamente

Artículo escrito por priyarajtt y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *