Mongoose - 使用 unique: true 和默认值: null

问题描述 投票:0回答:1

我有一个用猫鼬创建的用户模型,我希望记录要么有电子邮件,要么没有。在用户拥有电子邮件的情况下,我希望它是唯一的,但在其他情况下,当该字段为空时,它不会是唯一的,因为多个用户可能决定不提供电子邮件。 有没有办法允许具有

null
值的重复项但拒绝任何其他重复项?

我目前有一个带有电子邮件字段的用户架构,如下所示:

const user_schema = new mongoose.Schema({
  email: {
    type: String,
    unique: true,
    default: null,
    sparse: true
  }
})

执行此操作时,我收到以下错误:

E11000 duplicate key error collection: db.users index: email_1 dup key: { email: null }

我什至尝试创建这样的索引:

user_schema.index({ email: 1 }, { unique: true, sparse: true })

user_shema.index(
  { email: 1 },
  { unique: true, partialFilterExpression: { email: { $exists: true } } }
)
node.js mongoose model
1个回答
0
投票

您可以使用 default: "" 代替默认 null,然后将索引设置为:

schema.index({ email: 1 }, {
    unique: true,
    partialFilterExpression: {
      email: { $exists: true, $gt: "" },
    },
  }
);

这对我有用,我能够使用电子邮件创建多个文档:“”,如果电子邮件存在,那么它能够检查重复项。

© www.soinside.com 2019 - 2024. All rights reserved.