Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

Consultar uma Coleção Limitada

Nesta página

  • Sobre esta tarefa
  • Múltiplas gravações simultâneas
  • Antes de começar
  • Criar uma coleção limitada
  • Inserir dados de amostra
  • Passos
  • Devolver documentos na ordem de inserção
  • Documentos mais recentes devolvidos.
  • Saiba mais

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.

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.

Se houver gravadores simultâneos em uma capped collection, o MongoDB não garante que os documentos sejam retornados na ordem de inserção.

1
db.createCollection("log", { capped: true, size: 100000 } )
2
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
}
] )

Os exemplos a seguir mostram como:

  • Devolver documentos na ordem de inserção

  • Documentos mais recentes devolvidos.

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.

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
}
]

Voltar

criar