当用户文档更新时,我试图检查昵称是否更改。isModified
功能在save pre hook
中正常工作,但在findOneAndUpdate
中不工作。
我知道我可以使用this._update
,但我需要旧值和新值。
有人能解释一下为什么我不能在这里使用isModified
,我怎么才能得到解决方案?
控制器:
const updateProfile = asyncErrorHandler(async (req, res, next) => {
let user = await User.findOneAndUpdate({ uid }, req.body, { new: true })
// Other codes
})
findOneAndUpdate钩:
UserSchema.pre('findOneAndUpdate', function (next) {
if(this.isModified('nickname')){
// Some codes
}
});
根据官方文档,您不能在findOneAndUpdate pre hook
中使用isModified
函数。您要么必须在findOneAndUpdate pre hook
中执行显式查询,要么将其转换为save pre hook
。