MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Pipeline e índices de agregação


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.