Mongoose - 检测重复的字段

Posted

技术标签:

【中文标题】Mongoose - 检测重复的字段【英文标题】:Mongoose - detect duplicated fields 【发布时间】: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() 执行之间创建一个新用户(导致重复键错误)。 【参考方案1】:

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

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

【讨论】:

另外,请参阅this answer,了解如何“捕获”E11000 错误。

以上是关于Mongoose - 检测重复的字段的主要内容,如果未能解决你的问题,请参考以下文章

mongoose的基本操作

mongoose基本增删改查

基于其他字段的 Mongoose 验证 [重复]

Mongoose:查询参考文档数组上的字段,[重复]

mongoDb/Mongoose:使 emailId 唯一字段[重复]

如何使用 MongoDB/Mongoose 中的先前值更新字段 [重复]