Docs Menu
Docs Home
/ /

cursor.maxTimeMS() (método mongosh)

cursor.maxTimeMS(<time limit>)

Importante

Método mongosh

Esta página documenta una mongosh Método. Esta no es la documentación de un controlador específico del lenguaje, como 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.

El método tiene la siguiente forma de maxTimeMS() prototipo:

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

El método maxTimeMS() tiene el siguiente parámetro:

Parameter
Tipo
Descripción

milliseconds

entero

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

Importante

maxTimeMS() no está relacionado con la NoCursorTimeout bandera demaxTimeMS() consulta. se relaciona con el tiempo de procesamiento, mientras que se NoCursorTimeout relaciona con el tiempo de inactividad. El tiempo de inactividad de un cursor no influye en su tiempo de procesamiento.

El maxAwaitTimeMS() El método limita el tiempo que un cursor adaptable espera la siguiente respuesta. No limita 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

Este comando es compatible con todos los clústeres de MongoDB Atlas. Para obtener información sobre el soporte de Atlas para todos los comandos, consulte Comandos no compatibles.

  • 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 determina la finalización de las operaciones si el cursor asociado excede el límite de tiempo asignado. MongoDB finaliza las operaciones que exceden el límite de tiempo asignado mediante el mismo mecanismo db.killOp() que. MongoDB solo finaliza una operación en uno de sus puntos de interrupción designados.

MongoDB no contabiliza la latencia de red entre el cliente y el servidor para el límite de tiempo del cursor. Sin embargo, en un clúster fragmentado, MongoDB sí incluye la latencia entre las mongos instancias y para este límite de tiempo.mongod

Las consultas que generan varios lotes de resultados continúan devolviendo lotes hasta que el cursor excede el límite de tiempo asignado.

Los drivers de MongoDB y mongosh asocian todas las operaciones con una sesión de servidor, con la excepción de las operaciones de escritura no reconocidas. Para las operaciones no asociadas explícitamente a una sesión (es decir, mediante Mongo.startSession()), los drivers de MongoDB y mongosh crean una sesión implícita y la asocian con la operación.

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

Por ejemplo, considere una operaciónfind()con elmaxTimeMS()configurado para un tiempo de espera de 31 minutos. El servidor devuelve un cursor junto con un lote de documentos definido por elcursor.batchSize()defind(). 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 de 30 minutos en procesar el lote actual de documentos, la sesión se marca como expirada y se cierra. Al cerrar la sesión, el servidor también elimina el cursor, a pesar de que este esté configurado conmaxTimeMS()mayor 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 usarefreshSessionspara refrescar la sesión cada 5 minutos. Dado que la sesión nunca superará el tiempo de inactividad de 30 minutos, el cursor puede permanecer abierto hasta el valor configurado demaxTimeMS().

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

Tip

A partir de MongoDB,8.0 puede usar el defaultMaxTimeMS parámetro de clúster para especificar un límite de tiempo predeterminado para que se completen las operaciones de lectura individuales. Si una consulta especifica la maxTimeMS() opción, ese valor anula el defaultMaxTimeMS valor.

Ejemplo

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

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

Volver

cursor.maxAwaitTimeMS

En esta página