Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

166
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!