Consultar uma Coleção Limitada
Nesta página
Quando você faz uma query em uma coleção limitada sem especificar uma ordem de classificação, o MongoDB retorna os resultados na mesma ordem em que foram inseridos, ou seja, os documento mais antigos são retornados primeiro.
Use ordem natural para recuperar os elementos inseridos mais recentemente da coleta de forma eficiente. Isto é semelhante ao uso do comando tail
em um arquivo de log.
Sobre esta tarefa
Geralmente, os índices TTL (Time To Live) oferecem melhor desempenho e mais flexibilidade do que as capped collections. Os índices TTL expiram e removem dados de collections normais com base no valor de um campo digitado por data e um valor TTL para o índice.
As coleções limitadas serializam as operações de gravação e, portanto, têm pior desempenho simultâneo de inserção, atualização e exclusão do que as coleções não limitadas. Antes de criar uma coleção limitada, avalie se não é possível usar um índice TTL.
Múltiplas gravações simultâneas
Se houver gravadores simultâneos em uma capped collection, o MongoDB não garante que os documentos sejam retornados na ordem de inserção.
Antes de começar
Inserir dados de amostra
db.log.insertMany( [ { message: "system start", type: "startup", time: 1711403508 }, { message: "user login attempt", type: "info", time: 1711403907 }, { message: "user login fail", type: "warning", time: 1711404209 }, { message: "user login success", type: "info", time: 1711404367 }, { message: "user logout", type: "info", time: 1711404555 } ] )
Passos
Os exemplos a seguir mostram como:
Devolver documentos na ordem de inserção
Execute uma query na coleção log
em busca de documentos em que type
é info
e use a ordem de classificação padrão:
db.log.find( { type: "info" } )
[ { _id: ObjectId("660204b74cabd75abebadbc2"), message: 'user login attempt', type: 'info', time: 1711403907 }, { _id: ObjectId("660204b74cabd75abebadbc4"), message: 'user login success', type: 'info', time: 1711404367 }, { _id: ObjectId("660204b74cabd75abebadbc5"), message: 'user logout', type: 'info', time: 1711404555 } ]
Os documentos são devolvidos na ordem em que foram inseridos.
Documentos mais recentes devolvidos.
Para retornar documentos na ordem inversa de inserção (o que significa que os documentos mais recentes estão em primeiro lugar), especifique o método sort()
com o parâmetro $natural
definido como -1
.
A query a seguir retorna os três documentos mais recentes da coleção log
, começando pelo documento mais recente:
db.log.find().sort( { $natural: -1 } ).limit(3)
[ { _id: ObjectId("6601f2484cabd75abebadbbb"), message: 'user logout', type: 'info', time: 1711404555 }, { _id: ObjectId("6601f2484cabd75abebadbba"), message: 'user login success', type: 'info', time: 1711404367 }, { _id: ObjectId("6601f2484cabd75abebadbb9"), message: 'user login fail', type: 'warning', time: 1711404209 } ]