我有一个小型数据库结构:
export const ApplicationSchema = new Schema({
ownerId: String,
ownerName: String,
region: String,
fromAddress: String,
phone: String,
cameAddress: String,
status: {
type: String,
enum: ['new', 'booked', 'completed'],
default: 'new'
},
})
我需要更改“状态”,24 小时后,状态应等于“已预订”,如何执行此操作?
最佳答案
MongoDB 有一个名为计划触发器的工具,它可以让您做到这一点: https://docs.mongodb.com/stitch/triggers/scheduled-triggers/
但是,对于您的问题来说,这将是一个复杂而繁重的解决方案。您可以使用“createdAt”字段执行某些操作,并为您的当前状态创建一个虚拟字段:
export const ApplicationSchema = new Schema({
ownerId: String,
ownerName: String,
region: String,
fromAddress: String,
phone: String,
cameAddress: String,
createdAt: Date,
status: {
type: String,
enum: ['new', 'booked', 'completed'],
default: 'new'
},
toJSON: { virtuals: true }
})
ApplicationSchema.virtual('status.current')
.get(function () {
// subtracting and checking if it's been a day in milliseconds
if ((Date.now() - +new Date(this.createdAt)) >= 86400000) {
return 'completed'
}
return this.status
})
您必须使用 status.current 而不是 status 检查您的状态。 检查这里( https://mongoosejs.com/docs/2.7.x/docs/virtuals.html )以了解有关虚拟场的更多信息。
关于javascript - 过期后设置字段(MongoDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59414545/