我有猫鼬模型
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做到这一点?
谢谢
答案 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。