首页 > 解决方案 > 唯一的部分索引不适用于电子邮件上的猫鼬

问题描述

我正在使用 mongodb 4.4.4 版和 mongoose 5.5.9 版。我有一个用户模式,这就是我定义它的方式

let User = new Schema({
    email: { type: String, required: true, unique: true},
    phone: { type: String, required: true, unique: true},
    terms_accepted: { type: Boolean, required: true } 
});

我在 mongo 指南针中检查了为电子邮件和电话创建的唯一索引。我重新启动了 mongodb 并重新索引它。我可以使用相同的电子邮件地址保存数据。虽然电话唯一索引工作正常。

如果我使用 'mongoose-unique-validator - version 2.0.6' 插件,电子邮件索引将按预期工作。我想在我的模型中使用具有唯一约束的部分索引。我试过这样

email: { type: String, required: true, index: {
    unique: true,
    partialFilterExpression: { terms_accepted: true }
}}

我通过将“terms_accepted”设置为 true 和 false 对此进行了测试(有或没有 mongoose-unique-validator),电子邮件索引无法保存数据。我尝试在指南针中手动创建索引,它也不起作用。我已经尝试了所有关于堆栈溢出的解决方案,但都没有成功。我不知道是什么问题。

标签: node.jsmongodbmongoose

解决方案


推荐阅读