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
相关产品推荐
相关产品推荐

