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