如何在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();
解决方法
- 正确配置Schema:不要设置
{ _id: false },需在Schema中显式声明_id字段类型为ObjectId:
const sessionCardSchema = new Schema( { _id: mongoose.Schema.Types.ObjectId, unit: Number, creator: String } );
- 修正保存代码:将字符串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();
- 关键注意事项:
- 传入的
_id字符串必须是合法的MongoDB ObjectId格式(24位十六进制字符) - 禁用
{ _id: false }会导致Mongoose无法识别自定义_id配置 - 保存操作需调用文档实例的方法,而非模型本身的
save()
- 传入的
内容的提问来源于stack exchange,提问作者soroosh azadi
相关产品推荐
相关产品推荐

