所以我想在地址发生变化时挂钩,这样我就可以提醒用户更新。
但是,由于我的app逻辑,更新对象总是如下:
Location.findByIdAndUpdate( options.location_id, { name: options.name, address: options.address }).exec()
现在我可以通过首先查找位置来重写这一点,在此之前首先检查options.address是否不同,如果它是相同的,则将其从更新中排除。
然后我可以使用
LocationSchema.pre('findOneAndUpdate', function(next) {
if (typeof this._update.address == undefined) {
return next();
}
console.log("address updated, time to notify");
next();
});
但是我想知道我是否可以做类似于预保存方法中使用的常用逻辑的东西,比如:
LocationSchema.pre('findOneAndUpdate', function(next) {
if (!this.isModified('address')) {
return next();
}
console.log("address updated, time to notify");
next();
});
但是不可思议的是,TypeError:this.isModified不是一个函数。
在模型逻辑中执行此操作会更容易并保存呼叫。
答案 0 :(得分:3)
我有同样的问题。我已经解决了。
userSchema.pre('findOneAndUpdate', function(next) {
// if password is not updated
if (!this._update.password) {
return next()
}
bcrypt.hash(this._update.password, 8, (err, hash) => {
if (err) {
return next(err)
}
this._update.password = hash
next()
})
})