为什么这个partialFilterExpression引发错误?

时间:2019-04-10 21:51:10

标签: javascript database mongodb mongoose

我有一个这样的用户架构,当用户注册时,我希望将默认值设置为null,但也希望将此值设置为唯一。我尝试了此post的解决方案 我从字面上复制了相同的解决方案,但是仍然出现此错误 MongoError: E11000 duplicate key error index: ppp-ng-dev.users.$mobile_1 dup key: { : null }

我的模式

const userSchema = new Schema({
    mobile: {
            type: Number, 
        required: false,
        index: {
            unique: true,
            partialFilterExpression: {mobile: {$exists: true }}
        },
        default: null,
    },
})

即使语法正确,为什么仍会收到此错误? (显然)

1 个答案:

答案 0 :(得分:1)

问题是集合中有多个文档,其中字段null的值为mobile。这违反了指定索引的唯一性约束。正如JohnnyHK在票证中所指出的,您已链接:

  

请注意,唯一的稀疏索引仍然不允许具有电子邮件字段值为null的多个文档,只有多个没有电子邮件字段的文档。

在您的特定情况下,partialFilterExpression仅指定存在字段mobile的索引文档,其中包括定义了字段并将其显式定义为null的文档。