You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 13:05:25