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

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

有没有更多的面向未来的/更容易的方法来检查哪个元素/索引引起了碰撞?

不幸的是,从MongoDB 3.4.7开始,没有方法将碰撞索引列在一个单独的,易于parsing的字段中。

在Mongoose中有一个关于这个的讨论,但是这些解决scheme都依赖于parsing实际的错误信息(参见https://github.com/Automattic/mongoose/issues/2129 )。

由于节点驱动程序只是报告服务器给出的错误,所以有一个正是这个function的MongoDBfunction请求(见SERVER-4637 )。 我会build议对function请求进行评论/提升以提高对问题的认识。