Docs Menu
Docs Home
/ /
Conceptos CRUD

Cursors

A Elcursor es un puntero a los resultados de una consulta. Los cursores permiten iterar sobre los resultados de la base de datos, lote por lote.

Cuando ejecutas find() Los métodos mongosh y aggregate() o un controlador devuelven un cursor con un lote de resultados. Puede acceder a los documentos resultantes iterando manualmente el cursor o usando el método. Para más información,toArray() consulte Iterar un cursor mongosh en.

Si se está accediendo a una colección con tamaño fijo, se puede utilizar un cursor con seguimiento que recupere los nuevos documentos a medida que se insertan en la colección. Para aprender más, se puede consultar Cursores con seguimiento.

Los cursores creados dentro de una sesión de cliente se cierran en los siguientes escenarios:

  • El cliente agota el cursor.

  • Un usuario cierra manualmente el cursor.

  • Un usuario termina manualmente la sesión.

  • La sesión expira.

El parámetro cursorTimeoutMillis especifica el tiempo de espera para los cursores inactivos y tiene un valor por defecto de 10 minutos. MongoDB cierra los cursores inactivos creados fuera de las sesiones después de este umbral de tiempo. MongoDB extiende el tiempo de espera del cursor cada vez que el cursor devuelve una nueva agrupación. Para cerrar un cursor manualmente, se puede utilizar killCursors.

El tiempo de espera de la sesión del servidor se especifica mediante el parámetro localLogicalSessionTimeoutMinutes y tiene un valor por defecto de 30 minutos. Para extender una sesión más allá de 30 minutos, utilice refreshSessions. Para terminar manualmente una sesión, utilice killSessions.

Si se abre un cursor fuera de una sesión, los controladores de MongoDB y mongosh crean una sesión implícita y la asocian con la operación.

A medida que un cursor devuelve documentos, otras operaciones pueden ejecutarse en segundo plano y afectar los resultados, dependiendo del nivel de consistencia de lectura. Para más detalles, consulte Aislamiento de lectura, coherencia y actualidad.

Cuando se ejecuta una operación find o aggregate, la base de datos ejecuta un query hasta que encuentra suficientes documentos para llenar una agrupación. Cuando se llena una agrupación, el query se pausa. El query pausado en el servidor se denomina cursor y el ID asociado con el query pausado es un ID de cursor.

La base de datos devuelve la agrupación resultante y el ID del cursor al cliente. Los drivers de MongoDB y mongosh almacenan estos datos en una instancia de cursor del lado del cliente. Si hay más documentos coincidentes al llegar al final de una agrupación, el cursor del lado del cliente recupera automáticamente la siguiente agrupación del servidor usando getMore. Para ver cuántos resultados quedan en la agrupación actual, se usa cursor.objsLeftInBatch(). Para comprobar si quedan resultados en la agrupación actual o en el servidor, se usa cursor.hasNext().

Los cursores devuelven resultados en agrupaciones. La cantidad de datos en una agrupación debe ser menor que el tamaño máximo del documento BSON (16 MiB). Para especificar el número máximo de documentos permitidos en un lote, se puede consultar cursor.batchSize(). Por defecto, el tamaño de la agrupación para las operaciones de find() y aggregate() es 101. Las operaciones getMore subsiguientes emitidas contra el cursor resultante no tienen un tamaño de agrupación por defecto, por lo que están limitadas solo por el tamaño de mensaje de 16 mebibytes.

Para los queries que incluyen una operación de ordenación sin un índice, el servidor debe cargar todos los documentos en memoria para realizar la ordenación antes de devolver cualquier resultado.

El método db.serverStatus() devuelve un documento que incluye un campo metrics. El campo metrics incluye un campo metrics.cursor con información detallada sobre el cursor. Para aprender más, se puede consultar metrics.cursor.

Volver

Planes de query

En esta página