2

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 不接受部分索引过滤器的运算符中的逻辑否定。

4

1 回答 1

0

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

于 2017-02-23T02:55:51.003 回答