Mongoose插入Class集合报E11000重复键错误student.name为null是什么原因
问题原因
- 你的MongoDB中
class集合意外残留了一个student.name字段的唯一索引,这不是你当前Schema定义的内容,大概率是之前调试代码时曾错误配置过classSchema的字段/索引规则,Mongoose自动创建该索引后,即使你后续修改了Schema,MongoDB中已存在的索引不会自动删除。 - 当前你插入的所有Class文档都不存在
student.name字段,所以这类文档在该唯一索引中的值统一为null。MongoDB的唯一索引规则只允许最多一个文档的索引字段值为null,因此你插入第一个Class文档时能成功,插入第二个时就会触发重复键错误,和班级名称、学生ID是否重复完全无关。
解决步骤
- 连接到你的MongoDB数据库,手动删除这个多余的索引,你可以在Mongo Shell中执行以下命令:
db.class.dropIndex("student.name_1")
- 检查当前Mongoose的配置,确认没有错误的索引定义,避免后续再次自动生成多余索引。
- 重新尝试创建班级,即可正常插入。
另外补充:你当前定义的两个Schema本身是符合需求的,students字段存储学生ObjectId引用,没有唯一约束,完全支持同一名学生属于多个班级的场景。
内容的提问来源于stack exchange,提问作者Tlaloc-ES
相关产品推荐
相关产品推荐

