MongoDB E11000重复键错误求助:二次提交创建文档失败
解决MongoError: E11000重复键错误(questionNumber为null)
问题背景
首次创建提交文档正常,第二次触发E11000重复键错误,错误信息如下:
MongoError: E11000 duplicate key error collection: test.submissions index: submissions.questionNumber_1 dup key: { submissions.questionNumber: null } ... keyPattern: { 'submissions.questionNumber': 1 }, keyValue: { 'submissions.questionNumber': null } }
当前使用的Schema中questionNumber已设为必填,但仍出现该问题。
原因分析
虽然当前Schema未给questionNumber添加unique约束,但MongoDB数据库中残留了之前创建的questionNumber唯一索引。当某次请求中questionNumber意外为null(比如参数传递错误、变量未赋值),会写入一个questionNumber为null的文档;后续再出现null值时,唯一索引会拦截操作,抛出重复键错误。
解决步骤
检查集合索引
打开MongoDB Shell,执行命令查看test.submissions集合的所有索引:use test db.submissions.getIndexes()你会看到包含
submissions.questionNumber_1的唯一索引条目。删除残留的唯一索引
执行命令删除该索引(替换为getIndexes()返回的实际索引名):db.submissions.dropIndex("submissions.questionNumber_1")验证修复效果
重新执行创建提交的代码,确认错误不再触发。额外排查
检查业务代码中questionNumber变量的赋值逻辑,确保每次调用Submission.create时,该参数都有合法的非空值,避免因参数缺失导致的null写入。
内容的提问来源于stack exchange,提问作者OG_On_The_Beat
相关产品推荐
相关产品推荐

