【问题标题】:How to apply unique constraints only on specific fields in MongoDB如何仅对 MongoDB 中的特定字段应用唯一约束
【发布时间】:2022-02-22 22:15:58
【问题描述】:

我有一个用户模式如下(JavaScript):-

const userSchema = mongoose.Schema({
    name: {
        type: String,
        required: [true, "User must have a name."]
    },
    password: {
        type: String,
        required: [true, "User must have a password."],
        minLength: 8,
        select: false
    },
    email: {
        type: String,
        required: [true, "User must have an email."],
        unique: true,
        lowercase: true,
        validate: [validator.isEmail, "Email should be in correct format."]
    },
    active: {
        type: Boolean,
        default: true,
        select: false
    }
}

我想确保电子邮件是唯一的,但仅适用于活动设置为 true 的文档。这甚至可能吗,还是我应该为非活动用户制作另一个集合?

谢谢。

【问题讨论】:

标签: mongodb mongoose unique unique-index


【解决方案1】:

这是一种反模式,因为如果用户在不活跃后突然变得活跃,那么您将必须强制执行逻辑以确保他的电子邮件仍然是唯一的。

我会在电子邮件字段上创建一个关于活动状态的唯一索引,并且仅在您需要将非活动用户保留在某个地方并且您知道用户不能再次变得活动时(这很重要)所以创建一个非活动用户的新集合(请记住,mongo 文档最大为 16mb,因此请确保您没有创建可以无限制增长的数组)

【讨论】:

    猜你喜欢
    • 2023-02-13
    • 2018-05-09
    • 2022-09-30
    • 2013-01-19
    • 1970-01-01
    • 2014-07-22
    • 2015-11-14
    • 1970-01-01
    • 2012-04-12
    相关资源
    最近更新 更多