我有一个用猫鼬创建的用户模型,我希望记录要么有电子邮件,要么没有。在用户拥有电子邮件的情况下,我希望它是唯一的,但在其他情况下,当该字段为空时,它不会是唯一的,因为多个用户可能决定不提供电子邮件。 有没有办法允许具有
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 } } }
)
您可以使用 default: "" 代替默认 null,然后将索引设置为:
schema.index({ email: 1 }, {
unique: true,
partialFilterExpression: {
email: { $exists: true, $gt: "" },
},
}
);
这对我有用,我能够使用电子邮件创建多个文档:“”,如果电子邮件存在,那么它能够检查重复项。