我使用文档上的isModified()来执行某些逻辑。但是,即使在指定的字段发生更改之后,该方法似乎仍然返回false。
代码片段:
exports.updateUser = async (req, res, next) => {
const userId = req.params.id
const tmpUser = await userModel.findById(userId)
console.log(`User email before update - ${tmpUser.email}`)
const user = await userModel.findByIdAndUpdate(userId, {email: req.body.email}, { new: true })
console.log(`User email after update - ${user.email}`)
console.log(`Is Modified - ${user.isModified('email')}`)
res.status(200).json({
user
})
}控制台:
User email before update - Test1@gmail.com
User email after update - Test12@gmail.com
Is Modified - false文档的电子邮件字段在数据库中被更改,但是isModified()返回false。
还建议我是否可以使用钩子或中间件进行此更新操作。我尝试过'updateOne'的预挂钩,但它不起作用。
发布于 2020-11-15 14:37:34
findByIdAndUpdate()不触发钩子,因此isModified返回false (源约触发器:https://mongoosejs.com/docs/middleware.html#notes)。
但是,您可以使用稍微不同的方法(updateOne)来工作(并为您提供相同的功能):
const user = await userModel.updateOne({ _id: Types.ObjectId(userId ) }, { email: req.body.email });若要检查电子邮件是否已更新,请使用:result.nModified。这将返回1或0 (0表示未被修改)。
https://stackoverflow.com/questions/64843479
复制相似问题