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

MongoDB保存对象后立即查询返回null的原因排查

问题分析与修复方案

核心问题出在saveObject函数的异步处理逻辑——你用了await,但实际上并没有真正等待MongoDB的保存操作完成。

错误原因

Mongoose的save()方法有两种使用方式:

  • 传回调函数:此时它不会返回Promise,所以你写的await newObject.save(function(err, doc) {...})完全无效,saveObject会直接执行完毕,而数据库的写入操作还在后台异步进行。这时候紧接着调用getObject,自然查不到还没写完的数据。
  • 不传回调:此时它会返回一个Promise,才能被await正确等待。

修复代码

把saveObject改成Promise风格的写法,去掉回调:

async function saveObject(...) {
  try {
    await newObject.save();
  } catch (err) {
    console.error(err);
    throw err; // 建议抛出错误,让接口层可以处理并返回错误响应
  }
}

补充说明

  • 单独调用save和get正常,是因为单独测试时两次操作之间有足够的时间差,数据库已经完成了写入;但接口里是连续的await调用,因为之前的await没生效,查询操作跑在了写入操作前面。
  • JavaScript异步执行没有什么“离开作用域才同步”的特殊规则,本质就是你没正确等待异步操作完成。只要保证await的是一个真正的Promise,就能确保后续代码在异步操作完成后再执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 23:48:24