我一直在测试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
。
答案 0 :(得分:0)
您可以使用
{
"$match": {
"$and": [
{"type": "person" },
{"value.age": {"$gte":15}},
]
}
}