【问题标题】:mongoDb/Mongoose: make emailId unique field [duplicate]mongoDb/Mongoose:使 emailId 唯一字段[重复]
【发布时间】: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",那么您不需要或不需要sparse 或required,它们分别是相互冲突和隐含的。如果那里没有索引,则可能存在错误,因为数据不符合“唯一”约束。进入 shell,检查集合中带有 .getIndexes() 的索引,然后尝试使用 .createIndex() 创建索引(如果不存在),您应该会看到错误。如果您仍然不明白,请发布当前索引和/或错误。
  • 我对 mongoDb 不太了解,但我删除了 sparse 和 required 但仍然得到相同的输出。检查带有.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\" }
  • 是的,所以现在您看到“电子邮件”中有“重复”信息。在创建“唯一”索引之前,您需要“删除重复项”。现在明白了吗?

标签: node.js mongodb mongoose


【解决方案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 我没有找到的解决方案
猜你喜欢
  • 2014-07-22
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 2023-04-01
  • 2017-01-13
  • 2019-11-06
  • 2016-09-11
  • 2012-09-05
相关资源
最近更新 更多