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

312
Views
¿Eliminar automáticamente un documento después de la fecha de vencimiento en MongoDB y Node js?

Tengo una aplicación de reserva de citas y quiero que los detalles de la reserva se eliminen después de que expire la fecha reservada. ¿Cómo puedo lograr eso?

Lo probé con node-scheduler pero no funciona. y es una API simple con Crud Operations

Traté de llamar a Scheduler en index.js cuando se inicia el servidor

Aquí está mi código: //Programador

 import nodeSchedule from "node-schedule"; import AppointsModel from "../models/AppointsModel.js"; const Scheduler = () => { const currentDate = new Date(); const currentTime = currentDate.getTime(); const expiredAppoints = AppointsModel.find({ date: { $lte: currentDate, }, time: { $lte: currentTime, }, }); console.log(expiredAppoints); expiredAppoints.then((appoints) => { appoints.forEach((appoint) => { AppointsModel.findByIdAndRemove(appoint._id); }); } ); }; export default Scheduler; //Controller import AppointsModel from './../models/AppointsModel.js'; import Scheduler from '../middleware/Scheduler.js'; export const CreateAppoint = async (req, res) => { try { //create a new appointment for react native app const newAppoint = new AppointsModel({ name: req.body.name, doctor: req.body.doctor, date: req.body.date, time: req.body.time, }) // don't save the appoint if there is already one with the same time const appoint = await AppointsModel.findOne({ time: req.body.time, date: req.body.date, doctor: req.body.doctor, name: req.body.name }); if (appoint) { res.status(400).json({ message: "Appointment already exists" }) } else { await newAppoint.save(); res.status(201).json({ message: "Appointment created successfully" }) } } catch (e) { res.status(400).json({ success: false, error: e }); } } export const GetAppoints = async (req, res) => { try{ const appoints = await AppointsModel.find(); res.status(200).json({ appoints }) } catch(error){ res.status(500).send(error); } } export const DeleteAppoint = async (req, res) => { try { const appoint = await AppointsModel.findByIdAndDelete(req.params.id); res.status(200).send({ message: 'Appointment deleted successfully' }); } catch (e) { res.status(400).json({ success: false, error: e }); } } export const UpdateAppoint = async (req, res) => { try { const appoint = await AppointsModel.findByIdAndUpdate(req.params.id, req.body); res.status(200).send({ message: 'Appointment updated successfully' }); } catch (e) { res.status(400).json({ success: false, error: e }); } }
about 4 years ago · Santiago Gelvez
2 answers
Answer question

0

se puede hacer con TTL

  • Los índices TTL son índices especiales de un solo campo que MongoDB puede usar para eliminar automáticamente documentos de una colección después de una cierta cantidad de tiempo o en un horario específico.

prueba este artículo https://dev.to/lironer/delete-expired-documents-automatically-with-mongodb-ttl-index-l44

about 4 years ago · Santiago Gelvez Report

0

Agregue esto dentro de su modelo. Creará un índice TTL en su base de datos:

 expireAt: { type: Date, expires: 3600 }

Eliminará un documento después de 3600 segundos.

Luego simplemente agregue la clave expireAt y su tiempo como un valor a partir del cual comenzará la cuenta regresiva:

 const newAppoint = new AppointsModel({ name: req.body.name, doctor: req.body.doctor, date: req.body.date, time: req.body.time, expireAt: new Date() // or any time you want })
about 4 years ago · Santiago Gelvez 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!