当尝试在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
所以它告诉我我想知道什么,问题是电子邮件领域。但是我可以将违规字段作为键/值而不仅仅是字符串吗?
答案 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”)