sql >> Databáze >  >> NoSQL >> MongoDB

Agregační kanál a indexy

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.



  1. jak nainstalovat mongodb ovladače pro c++ v ubuntu?

  2. mongod shell se nespustí, data/db neexistuje

  3. Rails mongoid regex na poli Integer

  4. Chyba serializace Django na JSON:Objekt 'MetaDict' nemá atribut 'concrete_model'