首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >isModified()在猫鼬- v5

isModified()在猫鼬- v5
EN

Stack Overflow用户
提问于 2020-11-15 10:47:09
回答 1查看 374关注 0票数 2

我使用文档上的isModified()来执行某些逻辑。但是,即使在指定的字段发生更改之后,该方法似乎仍然返回false

代码片段:

代码语言:javascript
复制
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
    })
}

控制台:

代码语言:javascript
复制
User email before update - Test1@gmail.com
User email after update - Test12@gmail.com
Is Modified - false

文档的电子邮件字段在数据库中被更改,但是isModified()返回false。

还建议我是否可以使用钩子或中间件进行此更新操作。我尝试过'updateOne'的预挂钩,但它不起作用。

EN

回答 1

Stack Overflow用户

发布于 2020-11-15 14:37:34

findByIdAndUpdate()不触发钩子,因此isModified返回false (源约触发器:https://mongoosejs.com/docs/middleware.html#notes)。

但是,您可以使用稍微不同的方法(updateOne)来工作(并为您提供相同的功能):

代码语言:javascript
复制
const user = await userModel.updateOne({ _id: Types.ObjectId(userId ) }, { email: req.body.email });

若要检查电子邮件是否已更新,请使用:result.nModified。这将返回1或0 (0表示未被修改)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64843479

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档