Un cursor apunta a los resultados de una query. Los cursores te permiten iterar sobre los resultados de la base de datos un lote a la vez.
Casos de uso
Los find() aggregate() métodos y devuelven un cursor con un lote de resultados. Recorra el cursor manualmente o utilice para acceder a los documentos. Para obtener más toArray() información,consulte Iterar un cursor mongosh en.
Para colecciones limitadas, utiliza un cursor con seguimiento para recuperar documentos a medida que se insertan. Para más información, consulte cursores con seguimiento.
Comportamiento
MongoDB cierra los cursores creados dentro de una sesión de cliente cuando:
El cliente agota el cursor.
Cierra manualmente el cursor.
Se termina manualmente la sesión.
La sesión expira.
cursorTimeoutMillis establece el tiempo de espera para cursores inactivos (por defecto: 10 minutos). MongoDB cierra cursores inactivos fuera de sesiones después de este tiempo. Retornar un grupo extiende el tiempo de espera. Usar killCursors para cerrar manualmente los cursores.
localLogicalSessionTimeoutMinutes establece el tiempo de espera de la sesión (por defecto: 30 minutos). Utilice refreshSessions para extender una sesión y killSessions para finalizarla.
Los controladores y mongosh crean sesiones implÃcitas para cursores abiertos fuera de sesiones explÃcitas.
Actualizaciones concurrentes mientras se utiliza un cursor
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.
Resultados del cursor para bases de datos mongos inexistentes
A partir de MongoDB 7.2, las consultas de la canalización de agregación que intentan utilizar bases de datos inexistentes en implementaciones de mongos devuelven errores de validación.
En versiones anteriores, estas consultas de agregación devolvÃan cursores vacÃos.
Empezar
Detalles
Las operaciones find y aggregate se ejecutan hasta llenar un lote. Luego la query se pausa. Esta paused query es un cursor, identificado por una ID de cursor.
La base de datos devuelve el lote y el ID del cursor. Los controladores y mongosh lo almacenan en un cursor del lado del cliente. Si existen más documentos, el cursor recupera el siguiente lote mediante getMore. Utiliza cursor.objsLeftInBatch() para comprobar los resultados de los lotes restantes y cursor.hasNext() para obtener más resultados.
Agrupaciones de cursores
Los cursores devuelven resultados en lotes, limitados por el tamaño máximo de documento BSON 16 MiB. Use cursor.batchSize() para establecer el lÃmite de documentos. find() y aggregate() tienen un tamaño de lote predeterminado de 101. Las operaciones getMore subsiguientes no tienen lÃmite predeterminado, solo el tamaño del mensaje 16 MiB. En clústeres fragmentados, mongos no reenvÃa el batchSize especificado a fragmentos individuales. Las operaciones getMore subsiguientes en un clúster fragmentado devuelven hasta 16 MiB de documentos por lote, independientemente del batchSize configurado.
Clasificación
Las consultas con una operación de ordenación sin un Ãndice deben cargar todos los documentos en memoria antes de devolver los resultados.
Información del cursor
db.serverStatus() devuelve las métricas del cursor en el campo metrics.cursor. Ver metrics.cursor.