2017-12-27 398 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)。 編輯問題以澄清 –