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

Posted

技术标签:

【中文标题】mongoDb/Mongoose:使 emailId 唯一字段[重复]【英文标题】:mongoDb/Mongoose: make emailId unique field [duplicate] 【发布时间】:2018-04-14 07:40:39 【问题描述】:

我正在尝试使电子邮件字段在数据库级别上具有唯一性。当使用相同的 emailId 创建新文档时,它应该会引发错误。 为了实现它,我正在使用 email : type: String, trim: true, index: true, unique: true, sparse: true,required: true

但它似乎不起作用,目前它正在添加具有相同 emailId 的新文档。

推荐这篇文章:mongoDB/mongoose: unique if not null

检查了.getIndexes(),这是它的输出:

【问题讨论】:

那里有一些不需要的选项可以相互抵消。如果您的意思是"unique",那么您不需要或不需要sparserequired,它们分别是相互冲突和隐含的。如果那里没有索引,则可能存在错误,因为数据不符合“唯一”约束。进入 shell,检查集合中带有 .getIndexes() 的索引,然后尝试使用 .createIndex() 创建索引(如果不存在),您应该会看到错误。如果您仍然不明白,请发布当前索引和/或错误。 我对 mongoDb 不太了解,但我删除了 sparserequired 但仍然得到相同的输出。检查带有.getIndexes() 的索引已将其输出添加到问题本身中 我还请您尝试.createIndex( "email": 1 , "unique": true )。在 mongoose 模式上设置选项此时不会解决此问题。您尝试从“shell”创建索引(请因为我们想要“文本”而不​​是屏幕截图)并查看报告的错误。它会告诉您索引创建失败,它会告诉您“确切原因”以及当前哪些数据导致了问题。 知道了。尝试命令.createIndex() 并收到此错误E11000 duplicate key error collection: diesel-local.admins index: email_1 dup key: : \"admin@admin.com\" 是的,所以现在您看到“电子邮件”中有“重复”信息。在创建“唯一”索引之前,您需要“删除重复项”。现在明白了吗? 【参考方案1】:

你可以使用mongoose-unique-validator

const mongoose = require('mongoose')
const uniqueValidator = require('mongoose-unique-validator')
const Schema = mongoose.Schema

const UserSchema = new Schema(
  email: 
       type: String,
       required: true,
       unique: true
  ,
  username: 
    type: String,
    required: true,
    unique: true
  
)
UserSchema.plugin(uniqueValidator)

module.exports = mongoose.model('Users', UserSchema)

【讨论】:

插件工作正常,但有没有其他方法可以在不使用插件的情况下解决问题? 我已经尝试了所有@Lovika 我没有找到的解决方案

以上是关于mongoDb/Mongoose:使 emailId 唯一字段[重复]的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB / Mongoose 一对多关系

如何使用用户名和密码连接 mongodb(mongoose)?

MongoDB、Mongoose 和复合 _id

mongodb -mongoose 增删查改

MongoDB / Mongoose 单元测试 - 最佳实践? [关闭]

?? Mongoose?Node.js?MongodB ?????????????