我正在尝试使用猫鼬中可用的 presave 钩子更新数组。我将此数组用于审计目的,因此我想使用这些中间件强制执行正确的值
这是我的架构
const taskSchema = new mongoose.Schema({
id: { type: String, required: true },
status: { type: String, required: true },
code: { type: String, required: true }, // ENQUIRY
events:{
type:[{
status: {type: String, required: true},
date:{ type: Date, required: true}
}], required: false
},
assignedTo: { type: mongoose.Schema.Types.ObjectId, ref: 'User', required: false },
}, {timestamps:true});
该逻辑在保存中间件挂钩方面效果很好。
taskSchema.pre('save', async function(next) {
try {
let event = {}
let now = Date.now();
event.status = this.status;
event.date = now;
this.events.push(event);
next();
} catch (error) {
console.log(error);
next(error);
}
});
在 findOneAndUpdate 挂钩中使用时出错
taskSchema.pre('findOneAndUpdate', async function(next) {
try {
let event={}
let now = Date.now();
event.status = this._update.status;
event.date = now;
this.events.push(event);
next();
} catch (error) {
console.log(error);
next(error);
}
});
我不确定我在这里缺少什么。这是错误
TypeError: Cannot read property 'push' of undefined
我看到 this.events 是未定义的。
如何访问该数组以更新它?我也应该忽略 request.body.events 中发送的任何内容
提前致谢。