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

时间:2013-07-09 11:53:45

标签: node.js mongodb

当尝试在mongo中输入一个新文档时,如果在另一个文档中已存在的字段上输入值,那么当我遍历错误对象时,我会得到这个:

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

name:MongoError 错误:E11000重复键错误索引:draw.users。$ email_1 dup key:{:“spam@online.no”} 代码:11000 n:0 好的:1

所以它告诉我我想知道什么,问题是电子邮件领域。但是我可以将违规字段作为键/值而不仅仅是字符串吗?

5 个答案:

答案 0 :(得分:3)

我使用正则表达式。喜欢这个

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

这完全是hacky,但对我有用。

答案 1 :(得分:2)

使用split错误消息以这种方式返回工作

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

答案 2 :(得分:1)

在新版本的MongoDB中,您也可以这样做。

其中This API cannot be enabled at the moment. You may lack appropriate permissions. 是重复的字段名称,而dupField是重复的字段值。

err.keyValue[dupField]

答案 3 :(得分:0)

如果它发生碰撞,那么为该查询创建一个find()将返回碰撞对象并从那里开始。

答案 4 :(得分:0)

错误消息未提供您要查找的信息:

  

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

但是它足以让你找回它。

您需要获取导致问题的索引:“email_1”(使用正则表达式)

然后你需要向db询问这个索引:

  

draw.users.getIndexKey( “EMAIL_1”)