Mongo聚合匹配表达式和部分索引

时间:2017-12-27 12:55:55

标签: mongodb indexing match aggregation

我一直在测试Mongo上的部分索引,似乎在$match阶段使用aggregation expression会干扰使用正确的索引。

例如,我有一个data集合,其中包含以下文档:

{
    "type": "person",
    "value": {
        "id": 1,
        "name": "Person 1",
        "age": 10
    }
},
{
    "type": "person",
    "value": {
        "id": 2,
        "name": "Person 2",
        "age": 20
    }
}

我为{"type": "person"}文档创建了部分索引。当我运行聚合

{
    "$match": {
        "type": "person",
        "value.age": { "$gte": 15 }
    }
}

索引记录命中,但是如果我进行下一次聚合则不会。

{
    "$match": {
        "$expr": {
            "$and": [
                { "$eq": ["$type", "person"] },
                { "$gte": ["$value.age", 15] },
            ]
        }
    }
}

$match中的部分索引和聚合表达式是否不兼容?我有什么方法可以做到这一点吗?

PS:我需要使用聚合表达式,因为我使用let和pipeline syntax创建$lookup

1 个答案:

答案 0 :(得分:0)

  

您可以使用



{
    "$match": {
         "$and": [
                {"type": "person" },
                {"value.age": {"$gte":15}},
         ]
    }
}