Menu Docs
Página inicial do Docs
/ /

Cursores persistentes

Por padrão, o MongoDB fecha automaticamente um cursor quando o cliente esgota todos os resultados no cursor. No entanto, para capped collections , você pode usar um cursor persistente que permanece aberto depois que o cliente esgota os resultados no cursor inicial. Os cursor adaptável são conceitualmente equivalentes ao comando Unix com a opção modo" -f " tail . Depois que os clientes inserem documentos adicionais em uma collection limitada, o cursor persistente continua a recuperar os documentos.

Use cursores tailable em capped collection que têm altos volumes de gravação em que os índices não são práticos. Por exemplo, a replicação do MongoDB usa cursores tailable para rastrear o oplog primário.

Observação

Se sua query estiver em um campo indexado, use um cursor normal em vez de um cursor tailable. Acompanhe o último valor do campo indexado retornado pela query. Para recuperar os documentos recém-adicionados, faça uma query da collection novamente usando o último valor do campo indexado nos critérios de query. Por exemplo:

db.<collection>.find( { indexedField: { $gt: <lastvalue> } } )

Para criar um cursor adaptável em mongosh, consulte cursor.tailable().

Para ver os métodos de cursor persistente para o driver, consulte a documentação do driver.

Considere os seguintes comportamentos relacionados aos cursores tailable:

  • Cursores tailable não usam índices. Eles devolvem documentos em ordem natural.

  • Como os cursores tailable não usam índices, a verificação inicial da query pode ser cara. Depois de inicialmente esgotar o cursor, as recuperações subsequentes dos documentos recém-adicionados são baratas.

  • Um cursor pode se tornar inválido se os dados em sua posição atual forem substituídos por novos dados. Por exemplo, isso pode acontecer se a velocidade da inserção de dados for mais rápida do que a velocidade da iteração do cursor.

  • Por padrão, omongosh imprime um aviso quando você usa uma chamada de bloqueio em um cursor persistente, como .next() .hasNext()ou. Para silenciar esses avisos,cursor.disableBlockWarnings() use.

Voltar

Iterar um Cursor

Nesta página