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

如何获取MongoDB插入文档后自动生成的_id值

问题修复方案

问题根因

  • Mongoose 模型的创建方法拼写错误,正确调用应为小写的create,你代码中使用的大写Create属于不规范写法,部分版本会导致异常
  • create方法的回调函数支持两个入参,第一个为错误对象,第二个才是插入数据库后返回的完整新文档对象。你当前没有接收第二个参数,直接访问传入的原始参数b的_id字段,而你传入的参数本身不包含_id,因此取值为undefined;用mongoose.Types.ObjectId()包裹undefined时,方法会随机生成一个新的ObjectId,自然和数据库实际生成的_id不匹配
  • 不需要额外手动转换_id格式,Mongoose返回的文档中自带的_id本身就是合法的ObjectId类型

修复后代码

回调写法适配

exports.createBill = (b) => {
  return new Promise((resolve, reject) => {
    // 修正方法名,新增回调参数接收新文档
    Bills.create(b, function (err, newBill) {
      if (err) {
        return reject(err);
      }
      // 直接取返回文档的_id
      console.log(newBill._id);
      // 将_id resolve给调用方使用
      resolve(newBill._id);
    });
  });
};

更简洁的async/await写法(推荐)

Mongoose的create本身就返回Promise,不需要手动封装Promise层:

exports.createBill = async (b) => {
  const newBill = await Bills.create(b);
  console.log(newBill._id);
  return newBill._id;
};

调用方可以直接通过await createBill(参数)的方式拿到新生成的_id。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:45:01