【问题标题】:Mongo aggregation match expression and partial IndexesMongo 聚合匹配表达式和部分索引
【发布时间】:2018-06-08 02:56:42
【问题描述】:

我一直在 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 和管道 syntax 制作 $lookup

【问题讨论】:

    标签: mongodb indexing match aggregation


    【解决方案1】:

    你可以使用

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

    【讨论】:

    • 这相当于我的问题中的第一个聚合。我知道我可以做到这一点,但这不使用aggregation expressions。编辑问题以澄清
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 2019-10-06
    • 1970-01-01
    • 2019-05-21
    • 2011-06-13
    • 1970-01-01
    相关资源
    最近更新 更多