MongoDB报E11000重复键错误(id:null),二次插入失败求助
MongoDB E11000重复键错误排查方案
错误原因分析
错误信息E11000 duplicate key error collection: blog-api.blogs index: id_1 dup key: { id: null }指向你的blogs集合存在一个名为id_1的唯一索引,但你当前插入的数据并未提供id字段,MongoDB会将缺失的id字段默认填充为null。由于唯一索引不允许多个文档的该字段值重复(null会被判定为相同值),首次插入时null是唯一的,再次插入就触发了重复键冲突。
出现该问题的常见场景:
- 之前的Schema曾定义过
id字段并设置了唯一约束,后续删除该字段但未同步删除集合中的对应索引 - 手动给
blogs集合添加了id字段的唯一索引,而当前Schema中并未定义该字段
解决步骤
检查集合索引
打开MongoDB Shell,连接到blog-api数据库,执行命令查看blogs集合的所有索引:db.blogs.getIndexes()你会看到包含
id_1的唯一索引条目。删除无效索引
执行命令删除这个多余的id_1唯一索引:db.blogs.dropIndex("id_1")后续注意事项
Mongoose默认会自动为每个文档生成_id字段作为主键,无需手动定义id字段。如果确实需要自定义id字段,要确保它能生成唯一值,示例如下:// 先安装uuid包:npm install uuid const { v4: uuidv4 } = require('uuid'); const blogSchema = mongoose.Schema( { id: { type: String, unique: true, default: uuidv4 }, // 其他字段... }, { timestamps: true } );
内容的提问来源于stack exchange,提问作者Md Adil
相关产品推荐
相关产品推荐

