Generelt er det kun pipeline-operatorer, der kan udflades til en normal forespørgsel ($match , $limit , $sort , og $skip ) vil kunne bruge indekserne på en samling. Dette er en af grundene til, at $geoNear operatør tilføjet i 2.4 skal være ved starten af pipelinen.
Når du muterer dokumenterne med $project , $group , eller $unwind indekset er ikke længere gyldigt/brugbart.
Hvis du har et indeks på et matrixfelt, kan du stadig bruge det før $unwind for at fremskynde udvælgelsen af dokumenter til pipeline og derefter forfine de valgte dokumenter yderligere med en anden $match .
Overvej dokumenter som:
{ tags: [ 'cat', 'bird', 'blue' ] }
Med et indeks på tags .
Hvis du kun ønskede at gruppere tags, der starter med b så kunne du udføre en sammenlægning som:
{ pipeline: [
{ $match : { tags : /^b/ } },
{ $unwind : '$tags' },
{ $match : { tags : /^b/ } },
/* the rest */
] }
Den første $match matcher det grove korn ved hjælp af indekset på tags .
Den anden kamp efter $unwind vil ikke være i stand til at bruge indekset (dokumentet ovenfor er nu 3 dokumenter), men kan evaluere hvert af disse dokumenter for at bortfiltrere de ekstra dokumenter, der bliver oprettet (for at fjerne { tags :'cat' } fra eksemplet).
HTH - Rob.