创建数据库后一天,nodejs检查并更新数据库字段

时间:2019-06-09 09:57:23

标签: node.js mongodb express mongoose cron

我有猫鼬模型

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 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用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 :(得分:1)

一种精确地在1天后更新每条记录的方法是将每条记录的回调函数排队到Nodejs Event循环中。但这将太繁重了。如果您可以运行作业并更新1天前的记录,则可以使用https://www.npmjs.com/package/mongodb-cron