Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/99.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 对象数组上的唯一partialFilterExpression索引无效_Mongodb - Fatal编程技术网

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
,所以我必须确保在代码中删除任何空白值