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 - 检测重复的字段的主要内容,如果未能解决你的问题,请参考以下文章