Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Query una colección con tamaño fijo

Cuando haces queries a una colección con tamaño fijo sin especificar un orden de clasificación, MongoDB devuelve los resultados en el mismo orden en que fueron insertados, lo que significa que los documentos más antiguos se devuelven primero.

Usar ordenación natural para recuperar de manera eficaz los elementos más recientes insertados en la colección. Esto es similar a usar el tail comando en una entrada 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:

  • Devolver documentos en orden de inserción

  • Devolver los documentos más recientes

Query la colección log para obtener 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
}
]

Se devuelven los documentos en el mismo orden en que fueron insertados.

Para devolver documentos en orden inverso de inserción (lo que significa que los documentos más recientes están primero), especifica el método sort() con el parámetro $natural configurado en -1.

La siguiente query devuelve los tres documentos más recientes de la colección log, comenzando por 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