【发布时间】:2017-08-15 21:48:40
【问题描述】:
我有带有 2 个唯一字段(电子邮件和用户名)的用户架构,当我尝试使用重复字段创建新用户时出现该错误
{
"error": {
"code": 11000,
"index": 0,
"errmsg": "E11000 duplicate key error collection: InstaClone.users index: email_1 dup key: { : \"baidario.ua@gmail.com\" }",
"op": {
"hashedPassword": "$2a$10$eaMym5AMibJlGOSBV3/DHOXPhSoMMDTNwxGcSOn4tEPg07htyQ2Ey",
"email": "baidario.ua@gmail.com",
"username": "baidario",
"fullName": "Roman Baida",
"_id": "58d3a8acdc57641e30e9027a",
"created": "2017-03-23T10:50:49.188Z",
"__v": 0
}
}
}
如何获得重复的文件名?我看到的唯一方法是解析 errmsg 字段。也许有人知道更好的方法?
【问题讨论】:
-
在插入新用户之前,只需运行类似 db.users.find({$or: [{"username": username}, {"email": email}}) 的查询。如果它确实返回了一个文档,那么用户名或电子邮件已经存在于 db 中
-
@felix 该解决方案具有竞争条件,在该条件下,可以在
find()返回和create()执行之间创建一个新用户(导致重复键错误)。
标签: javascript node.js mongodb mongoose