Estoy usando el controlador Nodejs y MongoDB.
Una pregunta de dos partes
openOffers que quiero que caduque cuando llegue el momento closeOfferAt . Sé que MongoDB ofrece un TTL, expireAt y expireAfterSeconds . Pero, cuando los uso, se aplica el mismo TTL a todos los documentos de una colección en particular. No estoy seguro si estoy haciendo esto correctamente. Quiero el vencimiento personalizado del nivel del documento. ¡Cualquier sintaxis puede ser muy útil! Documentos en openOffers { "_id":"12345", "data": {...}, "closeOfferAt" : "2022-02-21T23:22:34.023Z" }openOfferLog . Esto es para que pueda conservar el documento para un análisis posterior. Enfoque actual : no he encontrado una manera de tener un TTL personalizado en cada documento en openOffers . Pero actualmente inserto documentos en ambos, openOffers y openOffersLog juntos, y cualquier cambio de datos en openOffers debe propagarse por separado a openOffersLog para garantizar la coherencia. Supongo que tiene que haber un mejor enfoque escalable.
EDITAR-1:
Estoy buscando alguna lógica de sintaxis que pueda usar para el caso de uso anterior. Si no es posible con el controlador MongoDB actual, estoy buscando una solución alternativa con el código NodeJS con el que puedo experimentar. Soy nuevo en NodeJS y MongoDB, por lo que cualquier razonamiento que respalde la solución también sería muy útil.
Hay dos formas de implementar índices TTL.
Así que la segunda opción cumple tu expectativa,
0 (cero) en el campo expireAfterSeconds mientras crea un índice, db.collection.createIndex({ "closeOfferAt": 1 }, { expireAfterSeconds: 0 })closeOfferAt mientras inserta el documento, esto eliminará el documento en una marca de tiempo particular. db.collection.insert({ "_id":"12345", "data": {...}, "closeOfferAt" : ISODate("2022-02-23T06:14:15.840Z") })No haga que la lógica de su aplicación dependa de los índices TTL.
En su aplicación, debe tener algún programador que ejecute tareas periódicas, algunas de ellas moverían las ofertas terminadas a otra colección y las eliminarían del original incluso de forma masiva y sin necesidad de establecer un índice TTL.
Para mantener la consistencia, nada mejor que una única fuente de información, así que si puede, evite eliminar y solo cambie algunos indicadores de estado y marcas de tiempo.
Un buen uso de un índice TTL es borrar automáticamente los datos antiguos después de un tiempo relativamente largo, como un mes o más. Esto mantiene el tamaño de la colección/índices bajo control.