2016-12-28 72 views
0

Mongo部分过滤器是否工作范围广泛,还是能够应用于每个单独的数组项目?独特的部分索引在Mongo中的数组中如何工作

使用案例:

架构

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

我唯一索引,上面写着源和的sourceID应该是唯一的。这意味着没有两个文档和单个文档可以具有相同的Source和SourceId。

我需要将它作为部分键,因为有时SourceId还不存在。所以我想添加过滤器: {“references.sourceId”:{“$ exists”:true}}

但是文档可能在单个文档上有多个引用 - 一个文档有一个sourceId,一个没有。我希望带有sourceId的数组项目得到索引,并且一个没有被忽略。

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

回答

0

Mongodb仅在文档基础上提供索引。如果具有数组的文档和具有多个字段的数组,则该字段没有限制是唯一的。即使您在部分表达式的字段上应用唯一索引,也可以在数组中具有相同的值