Docs Menu
Docs Home
/ /
/ / /

Query una colección con tamaño fijo

Cuando se consulta una colección limitada sin especificar un orden de clasificación, MongoDB devuelve los resultados en el mismo orden en que se insertaron, lo que significa que los documentos más antiguos se devuelven primero.

Usar Ordenamiento natural para recuperar eficientemente los elementos insertados más recientemente en la colección. Esto es similar a usar el tail comando en un archivo de registro.

En general, los índices TTL (Time To Live) ofrecen un mejor rendimiento y más flexibilidad que las colecciones con tamaño fijo. Los índices TTL caducan y remueven datos de las colecciones normales según el valor de un campo de tipo fecha y un valor TTL para el índice.

Las colecciones con tamaño fijo serializan las operaciones de guardado y, por lo tanto, tienen un rendimiento peor en la inserción, actualización y eliminación concurrentes que las colecciones sin tamaño fijo. Antes de crear una colección con tamaño fijo, considera si puedes usar un índice TTL en su lugar.

Si hay escritores concurrentes en una colección con tamaño fijo, MongoDB no ofrece garantías de que los documentos se devuelvan en el orden de inserción.

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

Los siguientes ejemplos le muestran cómo:

  • Devolución de documentos en orden de inserción

  • Devolver los documentos más recientes

Consulta la colección log en busca de documentos donde type sea info y utiliza el orden de clasificación predeterminado:

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

Los documentos se devuelven en el orden en que fueron insertados.

Para devolver los documentos en orden de inserción inverso (es decir, los documentos más recientes aparecen primero), especifique el métodosort()con el parámetro$naturalestablecido en -1.

La siguiente consulta devuelve los tres documentos más recientes de la colección log, comenzando con el documento más reciente:

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

Volver

Crear

En esta página