mongodb - 猫鼬中的 isModified() - v5
问题描述
我正在使用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。
还建议我是否可以为此更新操作使用挂钩或中间件。我已经尝试了 pre 钩子,'updateOne'
但它不起作用。
解决方案
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 表示未修改)。
推荐阅读
- java - 创建n个任务并在Spring Batch中并行执行
- javascript - 调试器无法使用 chrome devtools 运行节点 js
- sql - 仅更新最小值内的特定行
- javascript - React JS API 发布请求
- html - 角度材料输入视图上的蓝色背景颜色
- linux - 如何在 bash 脚本中正确使用 telnet?
- sql-server - 基于其他列集将列作为字符串返回
- vue.js - 替换导致 Vue-router 中出现 NavigationDuplicated 错误的查询
- javascript - 石头剪刀布游戏...无法弄清楚
- python - 如何正确使用数据透视创建自定义列名