Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

cursor.maxTimeMS() (método mongosh)

cursor.maxTimeMS(<time limit>)

Importante

Método mongosh

This page documents a mongosh method. This is not the documentation for a language-specific driver, such as Node.js.

Para los drivers de API de MongoDB, consulte la documentación del driver de MongoDB específica del lenguaje.

Especifica un límite de tiempo acumulativo en milisegundos para las operaciones de procesamiento en un cursor.

The maxTimeMS() method has the following prototype form:

db.collection.find(
{ <query> },
{ <projection> }
).maxTimeMS( <milliseconds> )

The maxTimeMS() method has the following parameter:

Parameter
Tipo
Descripción

milliseconds

entero

Especifica un límite de tiempo acumulado en milisegundos para las operaciones de procesamiento en el cursor.

Importante

maxTimeMS() is not related to the NoCursorTimeout query flag. maxTimeMS() relates to processing time, while NoCursorTimeout relates to idle time. A cursor's idle time does not contribute towards its processing time.

El maxAwaitTimeMS() método establece un límite en cuanto a cuánto tiempo un cursor con seguimiento espera la siguiente respuesta. No establece un límite en el tiempo total de procesamiento.

Este método está disponible en implementaciones alojadas en los siguientes entornos:

  • MongoDB Atlas: El servicio totalmente gestionado para implementaciones de MongoDB en la nube

Nota

This command is supported in all MongoDB Atlas clusters. For information on Atlas support for all commands, see Unsupported Commands.

  • MongoDB Enterprise: La versión basada en suscripción y autogestionada de MongoDB

  • MongoDB Community: La versión de MongoDB con código fuente disponible, de uso gratuito y autogestionada.

MongoDB apunta a operaciones para terminación si el cursor asociado excede su límite de tiempo asignado. MongoDB termina las operaciones que exceden su límite de tiempo asignado utilizando el mismo mecanismo que db.killOp(). MongoDB solo termina una operación en uno de sus puntos designados de interrupción.

MongoDB no cuenta la latencia de red entre el cliente y el servidor en el límite de tiempo de un cursor. En el caso de un clúster fragmentado, MongoDB sí incluye la latencia entre las instancias mongos y mongod dentro de este límite de tiempo.

Las consultas que generan múltiples lotes de resultados seguirán devolviendo lotes hasta que el cursor supere su tiempo asignado.

MongoDB drivers and mongosh associate all operations with a server session, with the exception of unacknowledged write operations. For operations not explicitly associated with a session (i.e. using Mongo.startSession()), MongoDB drivers and mongosh create an implicit session and associate it with the operation.

Si una sesión permanece inactiva durante más de 30 minutos, el servidor MongoDB la marca como caducada y puede cerrarla en cualquier momento. Al cerrar la sesión, el servidor MongoDB también finaliza las operaciones en curso y los cursores abiertos asociados a ella. Esto incluye los cursores configurados con noCursorTimeout() o con un superior maxTimeMS() a 30 minutos.

Por ejemplo, consideremos una find() operación con configurado para un tiempo maxTimeMS() de 31 espera de minutos. El servidor devuelve un cursor junto con un lote de documentos definido por de. La sesión se actualiza cada vez que la aplicación solicita un nuevo lote de documentos al servidor. Sin embargo, si la aplicación tarda más cursor.batchSize() find()de 30 minutos en procesar el lote actual de documentos, la sesión se marca como caducada y se cierra. Cuando el servidor cierra la sesión, también elimina el cursor a pesar de que este esté configurado con mayor maxTimeMS() que 30 minutos. Cuando la aplicación solicita el siguiente lote de documentos, el servidor devuelve un error.

Para las operaciones que devuelven un cursor, si el cursor puede estar inactivo durante más de 30 minutos, emite la operación dentro de una sesión explícita utilizando Mongo.startSession() y actualiza periódicamente la sesión utilizando el comando refreshSessions. Por ejemplo:

var session = db.getMongo().startSession()
var sessionId = session
sessionId // show the sessionId
var cursor = session.getDatabase("examples").getCollection("data").find().noCursorTimeout()
var refreshTimestamp = new Date() // take note of time at operation start
while (cursor.hasNext()) {
// Check if more than 5 minutes have passed since the last refresh
if ( (new Date()-refreshTimestamp)/1000 > 300 ) {
print("refreshing session")
db.adminCommand({"refreshSessions" : [sessionId]})
refreshTimestamp = new Date()
}
// process cursor normally
}

En la operación de ejemplo, el métododb.collection.find()está asociado a una sesión explícita. El cursor está configurado concursor.maxTimeMS()para mantenerlo abierto durante al menos 31 minutos. El bucle while incluye un bloque que utilizarefreshSessionspara actualizar la sesión cada 5 minutos. Dado que la sesión nunca superará el tiempo de espera de inactividad de 30 minutos, el cursor puede permanecer abierto hasta elmaxTimeMS() configurado.

Para los controladores de MongoDB, consulta la documentación del controlador para obtener instrucciones y la sintaxis para crear sesiones.

Ejemplo

La siguiente query especifica un límite de tiempo de 50 milisegundos:

db.collection.find({description: /August [0-9]+, 1969/}).maxTimeMS(50)