【问题标题】:Mongoose - detect duplicated fieldsMongoose - 检测重复的字段
【发布时间】: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


【解决方案1】:

要自定义从 mongoose 唯一验证返回的错误,您可以使用名为:mongoose-beautiful-unique-validation的包:mongoose-beautiful-unique-validation

https://www.npmjs.com/package/mongoose-beautiful-unique-validation

【讨论】:

  • 另外,请参阅this answer,了解如何“捕获”E11000 错误。
猜你喜欢
  • 2020-08-28
  • 2021-09-04
  • 2012-09-29
  • 2018-10-22
  • 2018-04-14
  • 2018-01-12
  • 1970-01-01
  • 2014-03-01
  • 2014-04-25
相关资源
最近更新 更多