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.
Acerca de esta tarea
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.
Guardados concurrentes múltiples
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.
Antes de comenzar
Insertar datos de muestra
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 } ] )
Pasos
Los siguientes ejemplos le muestran cómo:
Devolver documentos en orden de inserción
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.
Devolver los documentos más recientes
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 } ]