Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Menu Docs
Página inicial do Docs
/
Manual do banco de dados
/ /

Cursors

Um cursor é um ponteiro para os resultados de uma consulta. Os cursores permitem iterar sobre os resultados do banco de dados um lote de cada vez.

Quando você executa os métodos find() aggregate() e usando mongosh ou um driver, eles retornam um cursor contendo um lote de resultados. Você pode acessar os documentos resultantes iterando manualmente o cursor ou usando o método. Para mais informações,toArray() consulte Iterar um cursor mongosh no.

Se você estiver acessando uma collection limitada, poderá usar um cursor persistente que recupera novos documentos à medida que eles são inseridos na collection. Para obter mais informações, consulte Cursores tailable.

Os cursores criados dentro de uma sessão do cliente são fechados nos seguintes cenários:

  • O cliente esgota o cursor.

  • Um usuário fecha manualmente o cursor.

  • Um usuário encerra manualmente a sessão.

  • A sessão expira.

O parâmetro cursorTimeoutMillis especifica o tempo limite para cursores ociosos e tem um valor padrão de 10 minutos. O MongoDB atinge o tempo limite dos cursores ociosos criados fora das sessões após esse limite. O MongoDB estende o tempo limite do cursor toda vez que o cursor retorna um novo lote. Para fechar manualmente um cursor, utilize killCursors.

O tempo limite da sessão do servidor é especificado pelo parâmetro localLogicalSessionTimeoutMinutes e tem um valor padrão de 30 minutos. Para estender uma sessão além de 30 minutos, use refreshSessions. Para encerrar manualmente uma sessão, utilize killSessions.

Se um cursor for aberto fora de uma sessão, os drivers do MongoDB e mongosh criarão uma sessão implícita e a associarão à operação.

Enquanto um cursor retorna documentos, outras operações podem ser executadas em segundo plano e afetar os resultados, dependendo do nível da preocupação de leitura . Para obter detalhes, consulte Isolamento de leitura, consistência e recência.

Quando você executa uma operação find ou aggregate, o banco de dados executa uma query até encontrar documentos suficientes para preencher um lote. Quando um lote é preenchido, a query é pausada. A query pausada no servidor é chamada de cursor, e o ID associado à query pausada é um ID de cursor.

O banco de dados retorna o lote resultante e a ID do cursor para o cliente. Os drivers e o mongosh do MongoDB armazenam esses dados em uma instância do cursor no lado do cliente . Se houver mais documentos correspondentes quando você chegar ao final de um lote, o cursor do lado do cliente recuperará automaticamente o próximo lote do servidor usando getMore. Para ver quantos resultados permanecem no lote atual, use cursor.objsLeftInBatch(). Para verificar se há algum resultado restante no lote atual ou no servidor, use cursor.hasNext().

Os cursores retornam resultados em lotes. A quantidade de dados em um lote deve ser menor que o tamanho máximo do documento BSON (16 MiB). Para especificar o número máximo de documentos permitidos em um lote, consulte cursor.batchSize(). Por padrão, o tamanho do lote para operações find() e aggregate() é 101. As operações getMore emitidas contra o cursor resultante não têm tamanho de lote padrão, portanto, são limitadas apenas pelo tamanho da mensagem de mebibyte 16.

Para consultas que incluem uma operação de classificação sem índice, o servidor deve carregar todos os documentos na memória para executar a classificação antes de retornar quaisquer resultados.

O método db.serverStatus() retorna um documento que inclui um campo metrics. O campo metrics contém um campo metrics.cursor com informações detalhadas do cursor. Para saber mais, consulte metrics.cursor.

Voltar

Planos de query

Nesta página