nodejs проверяет и обновляет поле базы данных через день после ее создания - PullRequest
0 голосов
/ 09 июня 2019

у меня есть модель мангуста

const BookingSchema = new Schema({
    start_at:{
      type:Date,
      required:true
    },
    end_at:{
        type:Date,
        required:true
    },
    canceled_at:{
        type:Date,
        required:false
    },
    status:{
        type:String,
        enum:["PENDING","APPROVED","NO_RESPONSE"],

        default:"PENDING"
    }},
    {
       timestamps:true
    }
);

мне нужно изменить значение поля status на NO_RESPONSE через день после его создания, если поле status не изменилось на APPROVED

как я могу сделать это, используя nodejs, mongod?

спасибо

Ответы [ 2 ]

2 голосов
/ 09 июня 2019

Вы можете использовать cronjob в этом случае

const CronJob = require('cron').CronJob;

const checkBookingStatus = new CronJob({
    cronTime: '0 1 * * *', // every 24 hours
    onTick: function() {
      console.log(`
           Runing a job at 01:00 at America/Sao_Paulo timezone
      `);
      Booking.update({ status: 'PENDING', createdAt: { 
        $lt: new Date(), 
       $gte: new Date(new Date().setDate(new Date().getDate()-1))
     }}, { status: '' })
    },
    start: true,
    timezone: "America/Sao_Paulo"
  });
1 голос
/ 09 июня 2019

Один из способов обновить каждую запись ровно через 1 день - поставить функцию обратного вызова в очередь для цикла событий Nodejs для каждой записи. Но это будет слишком тяжело сделать. Если вы можете запустить задание и обновить записи, датированные 1 днем, вы можете использовать https://www.npmjs.com/package/mongodb-cron.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...