Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

168
Vistas
Una buena manera de caducar documentos específicos en una colección y agregarlos a otra colección al vencimiento

Estoy usando el controlador Nodejs y MongoDB.

Una pregunta de dos partes

  1. Tengo una colección que se llama 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" }
  1. Quiero enviar estos documentos vencidos a otra colección 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.

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Hay dos formas de implementar índices TTL.

  • Eliminar después de una cierta cantidad de tiempo: esto es lo que ya ha implementado
  • Eliminar a una hora de reloj específica: para obtener respuestas detalladas, puede visitar MongoDB Docs

Así que la segunda opción cumple tu expectativa,

  1. Simplemente configure 0 (cero) en el campo expireAfterSeconds mientras crea un índice,
 db.collection.createIndex({ "closeOfferAt": 1 }, { expireAfterSeconds: 0 })
  1. simplemente configure la fecha de vencimiento en 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") })
over 4 years ago · Santiago Trujillo Denunciar

0

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.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda