Geralmente, apenas operadores de pipeline que podem ser nivelados para uma consulta normal (
$match , $limit , $sort e $skip ) poderá usar os índices em uma coleção. Esta é uma das razões pelas quais o $geoNear operador adicionado em 2.4 deve estar no início do pipeline. Depois de alterar os documentos com
$project , $group , ou $unwind o índice não é mais válido/utilizável. Se você tiver um índice em um campo de matriz, ainda poderá usá-lo antes do
$unwind para acelerar a seleção de documentos para o pipeline e refinar ainda mais os documentos selecionados com um segundo $match . Considere documentos como:
{ tags: [ 'cat', 'bird', 'blue' ] }
Com um índice em
tags . Se você quiser apenas agrupar as tags começando com
b então você pode executar uma agregação como:{ pipeline: [
{ $match : { tags : /^b/ } },
{ $unwind : '$tags' },
{ $match : { tags : /^b/ } },
/* the rest */
] }
O primeiro
$match a granulação grossa corresponde usando o índice em tags . A segunda correspondência após o
$unwind não poderá usar o índice (o documento acima agora tem 3 documentos), mas pode avaliar cada um desses documentos para filtrar os documentos extras que são criados (para remover { tags :'cat' } do exemplo). HTH - Rob.