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

MongoDB findByIdAndUpdate更新后返回旧数据问题咨询

问题原因与解决方案

这个问题我之前也碰到过,其实是findByIdAndUpdate的默认配置在搞鬼😉

核心原因

MongoDB的findByIdAndUpdate方法默认返回更新前的原始文档,而不是更新后的新文档。你看到.then()里的result是旧数据,不是因为异步操作没完成——更新其实已经成功执行了(这也是为什么你重新进入组件能拿到新数据的原因),只是这个方法默认不会把更新后的文档返回给你。

解决方法

只需要在findByIdAndUpdate的第三个参数里加上{ new: true }配置,就能让它返回更新后的最新文档了。修改你的代码如下:

Post.findByIdAndUpdate(req.params.id, req.body, { new: true })
  .then(result => {
    // 这里的result就是更新后的Game文档,包含新增的User对象
    console.log(result);
  })
  .catch(err => {
    // 处理错误
  });

额外补充

如果你的MongoDB版本比较旧(比如低于4.0),可能还需要在Mongoose连接时设置useFindAndModify: false,不过现在新版本的Mongoose已经默认禁用了useFindAndModify,所以大部分情况下不用额外处理。

总结一下:你的更新操作本身是成功的,只是方法默认返回旧数据,加上new: true就能拿到更新后的结果啦!

内容的提问来源于stack exchange,提问作者darbulix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:02:28