Mongoose pre updateOne钩子未触发:薪资文档更新时计算字段不生效
问题原因分析
1. pre("updateOne") 钩子的上下文错误
Mongoose 中,pre("updateOne") 钩子的 this 指向的是查询对象而非文档实例。你在钩子中尝试通过 this.basicSalary 获取字段值、this.SSC = ... 赋值的操作,本质上是在修改查询对象,而非目标薪资文档,因此这些计算逻辑完全不会作用到实际要更新的文档上。
2. 路由代码中缺失 await 关键字
路由里的 const salary = Salary.findById(req.body._id); 没有添加 await,导致 salary 是一个未兑现的 Promise 对象,而非实际的薪资文档实例。后续调用 salary.updateOne() 其实是在 Promise 上执行操作,这既不符合预期逻辑,也无法触发正确的文档更新流程。
3. updateOne 方法不会触发 pre("save") 钩子
即便修复了 await 问题,调用文档实例的 updateOne() 方法也不会触发已验证有效的 pre("save") 钩子。你的薪资计算逻辑只在 save 钩子中正确绑定了文档实例上下文,updateOne 操作完全绕开了这个逻辑。
内容的提问来源于stack exchange,提问作者Zain Mashaqba
相关产品推荐
相关产品推荐

