Mongodb 对象数组上的唯一partialFilterExpression索引无效
我有一个对象结构如下的集合:Mongodb 对象数组上的唯一partialFilterExpression索引无效,mongodb,Mongodb,我有一个对象结构如下的集合: { emails: [{email:"bob@jones.com", type: "work"}], _companyId: "FLEHFHOIEFHOIHEFHL" } 我想创建一个唯一的索引,以便电子邮件和\u companyId的组合是唯一的。我只想创建一个简单的复合索引,但是当我保存两个没有电子邮件的人时,它会在第二个索引上抛出一个错误,因为它没有为emails.email字段建立索引,只在索引中留下\u companyId,当我尝试插入第
{
emails: [{email:"bob@jones.com", type: "work"}],
_companyId: "FLEHFHOIEFHOIHEFHL"
}
我想创建一个唯一的索引,以便电子邮件
和\u companyId
的组合是唯一的。我只想创建一个简单的复合索引,但是当我保存两个没有电子邮件的人时,它会在第二个索引上抛出一个错误,因为它没有为emails.email
字段建立索引,只在索引中留下\u companyId
,当我尝试插入第二个没有电子邮件的人时,它会抛出一个重复的键错误。我想它只索引字段,如果有电子邮件存在。因此我发现了部分过滤表达式
功能。不幸的是,这不起作用!它不会抛出任何错误,但它很高兴允许重复
People.ensureIndex({ 'emails.email': 1, _companyId: 1 }, {
unique: 1,
partialFilterExpression: {
"emails": { "email": { $and: [{ $exists: true, $ne: "" }] } }
},
collation: { locale: "en", strength: 2 }
});
所以我把它改成:
People._ensureIndex({ 'emails.email': 1, _companyId: 1 }, {
unique: 1,
partialFilterExpression: {
"emails.email": { $and: [{ $exists: true, $ne: "" }] }
},
collation: { locale: "en", strength: 2 }
});
而且它根本不会创建索引说:
错误:关键电子邮件。电子邮件不能包含“.”。
有没有办法完成我想做的事情,或者这是一个失败的原因?好的,想出来了:
People.ensureIndex({ 'emails.email': 1, _companyId: 1 }, {
unique: 1,
partialFilterExpression: {
"emails.email": { $exists: true }
},
collation: { locale: "en", strength: 2 }
});
它说我不能使用$ne
,所以我必须确保在代码中删除任何空白值