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

Mongoose调用Model.create插入文档报E11000 name为null重复键错误怎么办

Mongoose E11000 重复键报错排查解决步骤

1. 校验请求参数

  • 打印接口接收到的req.body,确认Postman请求是否未携带name字段,或name字段值为空。若数据模型未配置name的required: true规则,未传该字段时Mongoose会默认向数据库插入name: null。

2. 验证索引属性

  • 你遇到的报错是典型的非稀疏唯一索引冲突问题:如果name字段的唯一索引未开启sparse属性,MongoDB会将所有缺失name字段的文档的索引值统一记为null,只要存在2个及以上没有name字段的文档,就会触发重复键报错,和你现有文档显式设置的name值无关。
  • 可在MongoDB Shell执行db.objects.getIndexes()查询索引配置,找到name_1对应的索引条目,检查是否存在sparse: true配置。

3. 修正Mongoose模型配置

如果你的业务允许部分文档不填name字段,需要在模型的name字段配置中新增稀疏索引规则:

const objectSchema = new mongoose.Schema({
  // 其他字段配置
  name: {
    type: String,
    unique: true,
    sparse: true, // 开启稀疏索引,仅对存在name字段的文档做唯一性校验
    // 其他原有配置
  }
})

如果业务要求name字段必填,直接在name配置中新增required: true,提前拦截未传name的非法请求。

4. 清理残留旧索引

修改模型配置后如果仍报错,是因为数据库中已经存在旧的非稀疏name_1索引,需要手动删除旧索引:
在MongoDB Shell执行 db.objects.dropIndex("name_1"),之后重启Node服务,Mongoose会自动重建符合新配置的索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 16:54:00