Um cursor aponta para os resultados de uma query. Os cursores permitem iterar sobre os resultados do banco de dados um lote de cada vez.
Casos de uso
Os métodos find() e aggregate() retornam um cursor com um lote de resultados. Itere o cursor manualmente ou use toArray() para acessar documentos. Para mais informações, consulte Iterar um cursor no mongosh.
Para coleções limitadas, use um cursor persistente para recuperar documentos à medida que eles são inseridos. Para obter mais informações, consulte Cursores persistentes.
Comportamento
O MongoDB fecha os cursores criados dentro de uma sessão do cliente quando:
O cliente esgota o cursor.
Você fecha manualmente o cursor.
Você encerra manualmente a sessão.
A sessão expira.
cursorTimeoutMillis define o tempo limite para cursores ociosos (padrão: 10 minutos). O MongoDB fecha os cursores ociosos fora das sessões após esse horário. A devolução de um lote estende o tempo limite. Use killCursors para fechar os cursores manualmente.
localLogicalSessionTimeoutMinutes define o tempo limite da sessão (padrão: 30 minutos). Use refreshSessions para estender uma sessão e killSessions para encerrá-la.
Drivers e mongosh criam sessões implícitas para cursores abertos fora de sessões explícitas.
Atualizações simultâneas ao usar um cursor
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.
Resultados do cursor para bancos de dados mongos inexistentes
A partir do MongoDB 7.2, as query do aggregation pipeline que tentam usar reconhecimento de data center inexistentes em implantações do mongos retornam erros de validação.
Nas versões anteriores, essas query de agregação retornam cursor vazios.
Começar
Detalhes
As operações find e aggregate são executadas até preencherem um lote. A query é pausada. Essa query pausada é um cursor, identificado por um ID de cursor.
O banco de dados retorna o ID do lote e do cursor. Os drivers e o mongosh armazenam isso em um cursor do lado do cliente . Se houver mais documentos, o cursor recuperará o próximo lote por meio de getMore. Use cursor.objsLeftInBatch() para verificar os resultados restantes do lote e cursor.hasNext() para verificar mais resultados.
Lotes de cursores
Os cursores retornam resultados em lotes, limitados pelo tamanho máximo do documento BSON de 16 MiB. Use cursor.batchSize() para definir o limite do documento. find() e aggregate() padronizam para um tamanho de lote de 101. As operações getMore subsequentes não têm limite padrão, apenas o tamanho da mensagem 16 MiB.
Classificação
Queries com uma operação de classificação sem índice devem carregar todos os documentos na memória antes de retornar resultados.
Informações do cursor
db.serverStatus() retorna métricas de cursor no campo metrics.cursor. Consulte metrics.cursor.