Mongodb重复键错误。 如何从错误对象中获取错误字段作为对象?

当试图在一个已经存在于另一个文档中的字段上input值为mongo的新文档时,当我遍历错误对象时,会得到这个值:

for(var att in err){ console.log(att+": "+err[att]); } 

名称:MongoError错误:E11000重复键错误索引:draw.users。$ email_1 dup键:{:“spam@online.no”} code:11000 n:0 ok:1

所以它告诉我我想知道什么,问题是电子邮件字段。 但是,我能把犯罪的领域看作一个关键/价值而不是一个string吗?

       

网上收集的解决方案 "Mongodb重复键错误。 如何从错误对象中获取错误字段作为对象?"

我使用正则expression式。 喜欢这个

 if(err){ field = err.err.match(/\$(.*?)_/)[1] } 

这是完全黑客,但正在为我工​​作。

如果碰撞,那么为该查询做一个find()将返回碰撞对象,然后你从那里返回。

错误消息不会提供您正在查找的信息:

名称:MongoError错误:E11000重复键错误索引:draw.users。$ email_1 dup键:{:“spam@online.no”} code:11000 n:0 ok:1

但它给你足够的检索它。

你需要得到导致问题的索引:“email_1”(使用正则expression式)

那么你需要问db这个索引:

draw.users.getIndexKey( “EMAIL_1”)

在错误信息上使用拆分为我返回工作这种方式

 var x= err.errmsg.split("index:")[1].split("dup key")[0].split("_")[0];