Sie können keinen Index erstellen, der so funktioniert, wie Sie ihn beschrieben haben. Es gibt keine Möglichkeit, eine der Ausgaben eines Pipeline-Schritts zu „indizieren“, wenn eine Aggregation ausgeführt wird.
Es gibt einige Aggregationsoperatoren, mit denen arbeiten können MongoDB-Sammlungsindizes .
Derzeit beinhalten sie:$match
, $sort
, $limit
, und $skip
.
Als $match
eines davon ist, kann die Leistung der von Ihnen geschriebenen Aggregationsabfrage davon profitieren, wenn Sie einen zusammengesetzten Index für die beiden Felder deklarieren, insbesondere da Sie $match
korrekt platziert haben am Anfang der Pipeline:
db.theCollection.ensureIndex({user: 1, type: 1})
Die $group
Schritt in der Pipeline übernimmt die Ergebnisse von $match
und im Idealfall relativ schnell sein. :)