【问题标题】:nodejs check and update database field one day after it was creatednodejs在创建一天后检查并更新数据库字段
【发布时间】:2023-04-04 18:30:02
【问题描述】:

我有猫鼬模型

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 字段没有更改为APPROVED,我需要在创建一天后将status 字段更改为NO_RESPONSE

我如何使用 nodejs,mongod 做到这一点?

谢谢

【问题讨论】:

    标签: node.js mongodb express mongoose cron


    【解决方案1】:

    这种情况下可以使用 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"
      });
    

    【讨论】:

    • 感谢您的回答,我需要一些更灵活的东西,例如触发器或任何东西,如果我找不到其他解决方案,我会为您的回答投票并接受
    【解决方案2】:

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

    【讨论】:

    • 谢谢你的回答我需要类似第一种方式但没有回调的东西:)函数
    猜你喜欢
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-14
    • 2018-03-31
    • 1970-01-01
    • 2013-12-14
    相关资源
    最近更新 更多