MongoDB NodeJS驱动程序:重复键“E11000”提取索引名称

时间:2017-08-13 17:16:45

标签: node.js mongodb error-handling

使用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之间已经不同)。

是否有更多面向未来/更简单的方法来检查导致碰撞的元素/索引?

1 个答案:

答案 0 :(得分:1)

不幸的是,MongoDB 3.4.7中没有方法在单独的,易于解析的字段中列出冲突索引。

Mongoose就此进行了讨论,但解决方案都依赖于解析实际的错误消息(参见https://github.com/Automattic/mongoose/issues/2129)。

由于节点驱动程序只报告服务器给出的错误,因此对此功能有一个MongoDB功能请求(请参阅SERVER-4637)。我建议对功能请求进行评论/提升,以提高对该问题的认识。