Obecně platí, že pouze operátory kanálu, které lze sloučit do normálního dotazu ($match , $limit , $sort a $skip ) bude moci používat indexy na kolekci. To je jeden z důvodů $geoNear operátor přidaný v 2.4 musí být na začátku kanálu.
Jakmile zmutujete dokumenty pomocí $project , $group nebo $unwind index již není platný/použitelný.
Pokud máte index v poli pole, můžete jej stále použít před $unwind pro urychlení výběru dokumentů do kanálu a následné další upřesnění vybraných dokumentů pomocí druhého $match .
Zvažte dokumenty jako:
{ tags: [ 'cat', 'bird', 'blue' ] }
S indexem na tags .
Pokud jste chtěli pouze seskupit značky začínající b pak můžete provést agregaci jako:
{ pipeline: [
{ $match : { tags : /^b/ } },
{ $unwind : '$tags' },
{ $match : { tags : /^b/ } },
/* the rest */
] }
První $match shoduje se hrubé zrno pomocí indexu na tags .
Druhá shoda po $unwind nebude moci použít index (výše uvedený dokument nyní obsahuje 3 dokumenty), ale může vyhodnotit každý z těchto dokumentů a odfiltrovat další dokumenty, které se vytvoří (pro odstranění { tags :'cat' } z příkladu).
HTH – Rob.