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

如何在Mongoose中自定义覆盖文档的_id字段?

自定义MongoDB文档_id保存失败问题

我定义了如下Schema:

const sessionCardSchema = new Schema(
    {
        unit: Number,
        creator: String
    }
);

用以下代码可以正常保存卡片:

const Card = {
  unit: 2,
  creator: 'Jack'
}
const sessionCard = new db.SessionCard(Card);
await sessionCardModel.save(); 

现在遇到的问题是:无法将自定义的ObjectId作为文档的_id保存。我尝试了以下操作,但无论Schema中是否包含_id字段都无效:

尝试的Schema

const sessionCardSchema = new Schema(
    {
        // _id: mongoose.Schema.Types.ObjectId,
        unit: Number,
        creator: String

    }, { _id: false }
);

尝试的保存代码

const Card = {
  _id: '657c95a4b6e31b1c968aec94',
  unit: 2,
  creator: 'Jack'
}
const sessionCard = new db.SessionCard(Card);
await sessionCardModel.save(); 

解决方法

  1. 正确配置Schema:不要设置{ _id: false },需在Schema中显式声明_id字段类型为ObjectId:
const sessionCardSchema = new Schema(
    {
        _id: mongoose.Schema.Types.ObjectId,
        unit: Number,
        creator: String
    }
);
  1. 修正保存代码:将字符串ID转换为mongoose.Types.ObjectId实例,同时调用文档实例的save()方法(而非模型的save()):
const Card = {
  _id: mongoose.Types.ObjectId('657c95a4b6e31b1c968aec94'),
  unit: 2,
  creator: 'Jack'
}
const sessionCard = new db.SessionCard(Card);
await sessionCard.save();
  1. 关键注意事项:
    • 传入的_id字符串必须是合法的MongoDB ObjectId格式(24位十六进制字符)
    • 禁用{ _id: false }会导致Mongoose无法识别自定义_id配置
    • 保存操作需调用文档实例的方法,而非模型本身的save()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 19:12:06