2017-08-13 98 views
1

在使用MongoDB NodeJS驱动程序(甚至猫鼬)时,插入新文档时,E11000错误可能会返回,表明发生重复键冲突。MongoDB NodeJS驱动程序:重复键'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\" }" 
} 

引起问题的索引的唯一概念是消息,它随时间变化(已蒙戈2之间不同英寸x和3.x)。

是否有更多的面向未来的/更容易检查的哪个元素/索引造成冲突的方式是什么?

+0

为什么你就不能查询,例如db.users.find({_ id:“blucell”}),然后尝试插入文档?您可以为所有唯一索引字段执行此操作,而不仅仅是_id。如果有匹配,您将知道不要插入文档,并可以通知用户名或电子邮件已被使用。 –

+0

是的,这是有效的,但它有很大的开销,然后你必须照顾可能的数据竞争,这不会导致太多干净的代码。我希望在那里有更原生的解决方案 –

回答

1

不幸的是没有方法的MongoDB 3.4.7列出一个单独的碰撞指标,易于解析领域。

有猫鼬在这方面的讨论,但解决方案都依赖于分析实际的错误信息(见https://github.com/Automattic/mongoose/issues/2129)。

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

相关问题