使用Mongoose创建第二个Class文档时触发E11000重复键错误求助
解决Mongoose E11000重复键错误(teachers.id: null)
问题根源
你遇到的问题是MongoDB集合中残留了旧的唯一索引:之前的Schema版本可能在teachers子文档中定义过id字段并设置了唯一索引,即使你修改了Schema(调整字段名或结构),MongoDB不会自动删除旧索引。当插入空teachers数组时,teachers.id会被解析为null,而MongoDB的唯一索引默认只允许一个null值,因此第二个文档插入时触发重复键错误。
解决步骤
1. 查看集合中的索引
打开MongoDB Shell,执行以下命令查看school.classes集合的所有索引:
use school db.classes.getIndexes()
你会看到名为teachers.id_1的唯一索引(带有unique: true属性)。
2. 删除多余的唯一索引
执行命令删除这个旧索引:
db.classes.dropIndex("teachers.id_1")
3. 验证当前Schema配置
检查你的classSchema,确保没有在teachers子文档的字段上意外设置唯一索引。当前你的Schema中teachers子文档的_id是ObjectId类型,作为数组子文档的默认主键,不会导致集合级别的重复键问题,无需额外修改。
4. 重新测试创建文档
再次调用创建Class的接口,此时应该能正常插入多个文档。
额外说明
MongoDB的唯一索引默认只允许一个null值,这就是第一个文档插入成功(首次出现null),第二个失败(重复null)的原因。如果后续需要在子文档字段上设置唯一索引,要注意数组场景下的索引行为,避免类似问题。
内容的提问来源于stack exchange,提问作者Mohammad ARZ
相关产品推荐
相关产品推荐

