Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

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 drivers de API do MongoDB, consulte a documentação do driver do MongoDB específica da linguagem.

Especifica um limite de tempo cumulativo em milissegundos para operações de processamento em um cursor.

The maxTimeMS() method has the following prototype form:

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

The maxTimeMS() method has the following parameter:

Parâmetro
Tipo
Descrição

milliseconds

inteiro

Especifica um limite de tempo cumulativo em milésimos de segundo para operações de processamento no 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.

O método define um limite maxAwaitTimeMS() para o tempo que um cursor tailable espera pela próxima resposta. Não define um limite no tempo total de processamento.

Esse método está disponível em implantações hospedadas nos seguintes ambientes:

  • MongoDB Atlas: o serviço totalmente gerenciado para implantações do MongoDB na nuvem

Observação

Este comando é aceito em todos os clusters do MongoDB Atlas. Para obter informações sobre o suporte do Atlas a todos os comandos, consulte Comandos não suportados.

  • MongoDB Enterprise: a versão autogerenciada e baseada em assinatura do MongoDB

  • MongoDB Community: uma versão com código disponível, de uso gratuito e autogerenciada do MongoDB

O MongoDB direciona as operações para encerramento se o cursor associado exceder seu limite de tempo alocado. O MongoDB encerra as operações que excedem o limite de tempo alocado usando o mesmo mecanismo de db.killOp(). O MongoDB só encerra uma operação em um de seus pontos designados.

O MongoDB não conta a latência de rede entre o cliente e o servidor para o limite de tempo de um cursor. Para um cluster fragmentado, no entanto, o MongoDB inclui a latência entre as instâncias mongos e mongod para esse limite de tempo.

As queries que geram vários lotes de resultados continuam a retornar lotes até que o cursor exceda o limite de tempo alocado.

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.

Se uma sessão estiver ociosa por mais de 30 minutos, o servidor MongoDB marcará essa sessão como expirada e poderá fechá-la a qualquer momento. Quando o servidor MongoDB fecha a sessão, ele também mata quaisquer operações em andamento e abre cursores associados à sessão. Isso inclui cursores configurados com noCursorTimeout() ou maiores maxTimeMS() que 30 minutos.

Por exemplo, considere uma operação dofind()com omaxTimeMS()configurado por um tempo limite de 31 minutos. O servidor retorna um cursor junto com um lote de documentos definido pelocursor.batchSize()dofind(). A sessão é atualizada toda vez que o aplicação solicita um novo lote de documentos do servidor. No entanto, se a aplicação demorar mais de 30 minutos para processar o lote atual de documentos, a sessão será marcada como expirada e encerrada. Quando o servidor fecha a sessão, ele também mata o cursor, apesar de o cursor estar configurado commaxTimeMS()maior que 30 minutos. Quando o aplicação solicita o próximo lote de documentos, o servidor retorna um erro.

Para operações que retornam um cursor, se o cursor ficar inativo por mais de 30 minutos, execute a operação em uma sessão explícita usando e atualize periodicamente Mongo.startSession() refreshSessions a sessão usando o comando. Por exemplo:

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
}

Na operação de exemplo , o métododb.collection.find()está associado com uma sessão explícita. O cursor é configurado comcursor.maxTimeMS()para manter o cursor aberto por pelo menos 31 minutos. O loop while inclui um bloco que utilizarefreshSessionspara atualizar a sessão a cada 5 minutos. Como a sessão nunca excederá o 30 minuto de tempo limite ocioso, o cursor pode permanecer aberto até omaxTimeMS() configurado.

Para drivers MongoDB, consulte a documentação do driver para obter instruções e sintaxe para criar sessões.

A partir do MongoDB,8.0 você pode usar o defaultMaxTimeMS parâmetro de cluster para especificar um limite de tempo padrão para que as operações de leitura individual sejam concluídas. Se uma query especificar uma opção, esse valor substituirá maxTimeMS() o defaultMaxTimeMS valor.

Exemplo

A seguinte query especifica um limite de tempo de 50 milésimos de segundo:

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