Mongo

时间:2016-12-28 18:54:19

标签: arrays mongodb indexing unique-index partial-index

Mongo部分过滤器是否可以处理文档范围,还是能够应用于每个单独的数组项?

使用案例:

模式

{ references: [
     {source: ObjectId("57dc688a1410a81ba0fcafcd"), sourceId: 1234},
     {source: ObjectId("57dc688a1410a81ba0fcafee"), sourceId: 5678},
]}

我有一个唯一索引,表明Source和SourceId应该是唯一的。这意味着没有两个文档和任何单个文档都不能具有相同的Source和SourceId。

我需要将其设为部分密钥,因为有时SourceId尚不存在。所以我想添加过滤器: {“references.sourceId”:{“$ exists”:true}}

但是文档可能在单个文档上有多个引用 - 一个带有sourceId而另一个没有。我希望带有sourceId的数组项被索引,而不希望被忽略的那一项。

这样做的正确方法是什么?如果过滤器必须是文档范围的,有没有办法指定忽略文档,如果任何引用缺少sourceId?目前,mongo不接受部分索引过滤器的运算符中的逻辑否定。

1 个答案:

答案 0 :(得分:0)

Mongodb仅在文档的基础上提供索引。如果具有阵列的文档和具有多个字段的阵列那么对该字段没有限制是唯一的。即使您在具有部分表达式的字段上应用唯一索引

,数组中也可以具有相同的值