2017-12-27 401 views
0

我一直在测试Mongo上的部分索引,并且似乎在$match阶段中使用aggregation expression会干扰使用正确的索引。Mongo聚合匹配表达式和部分索引

例如,我有一个data收集与下列文件:

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

我创建​​文档的部分索引。当我运行聚集

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

索引缓存命中,但如果我做了下聚集事实并非如此。

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

$match中的部分索引和聚合表达式是否不兼容?有什么办法可以使这项工作?

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

回答

0

您可以使用

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

+0

这是第一聚集在我的问题相当。我知道我可以这样做,但不会使用[聚合表达式](https://docs.mongodb.com/manual/meta/aggregation-quick-reference/#aggregation-expressions)。 编辑问题以澄清 –