Over het algemeen alleen pijplijnoperators die kunnen worden afgevlakt tot een normale zoekopdracht ($match , $limit , $sort , en $skip ) de indexen van een verzameling kunnen gebruiken. Dit is een van de redenen waarom de $geoNear operator toegevoegd in 2.4 moet aan het begin van de pijplijn staan.
Zodra u de documenten muteert met $project , $group , of $unwind de index is niet langer geldig/bruikbaar.
Als u een index op een arrayveld heeft, kunt u deze nog steeds gebruiken vóór de $unwind om de selectie van documenten naar pijplijn te versnellen en vervolgens de geselecteerde documenten verder te verfijnen met een tweede $match .
Overweeg documenten als:
{ tags: [ 'cat', 'bird', 'blue' ] }
Met een index op tags .
Als u alleen de tags wilt groeperen die beginnen met b dan zou je een aggregatie kunnen uitvoeren zoals:
{ pipeline: [
{ $match : { tags : /^b/ } },
{ $unwind : '$tags' },
{ $match : { tags : /^b/ } },
/* the rest */
] }
De eerste $match komt de grove korrel overeen met behulp van de index op tags .
De tweede wedstrijd na de $unwind zal de index niet kunnen gebruiken (het document hierboven bestaat nu uit 3 documenten) maar kan elk van die documenten evalueren om de extra documenten die worden aangemaakt eruit te filteren (om { tags :'cat' } uit het voorbeeld te verwijderen).
HTH - Rob.