使用MongoDB NodeJS驱动程序(甚至是mongoose)时,插入新文档时,可能会返回E11000
错误,表示发生了重复的密钥冲突。
如果我插入的集合有多个唯一索引并且我想确定哪一个被点击(例如,通知用户用户已经使用了他的用户名和/或电子邮件)该怎么办?
这是插入具有碰撞索引的文档后引发的错误:
{
"name": "MongoError",
"message": "E11000 duplicate key error index: db.users.$_id_ dup key: { : \"blucell\" }",
"driver": true,
"index": 0,
"code": 11000,
"errmsg": "E11000 duplicate key error index: db.users.$_id_ dup key: { : \"blucell\" }"
}
导致问题的索引的唯一概念是在消息中,随着时间的推移而变化(mongo 2.x和3.x之间已经不同)。
是否有更多面向未来/更简单的方法来检查导致碰撞的元素/索引?
答案 0 :(得分:1)
不幸的是,MongoDB 3.4.7中没有方法在单独的,易于解析的字段中列出冲突索引。
Mongoose就此进行了讨论,但解决方案都依赖于解析实际的错误消息(参见https://github.com/Automattic/mongoose/issues/2129)。
由于节点驱动程序只报告服务器给出的错误,因此对此功能有一个MongoDB功能请求(请参阅SERVER-4637)。我建议对功能请求进行评论/提升,以提高对该问题的认识。