sql >> Database >  >> NoSQL >> MongoDB

Aggregatiepijplijn en indexen

Over het algemeen alleen pijplijnoperators die kunnen worden afgevlakt tot een normale zoekopdracht ($match , $limit , $sort , en $skip ) de indexen van een verzameling kunnen gebruiken. Dit is een van de redenen waarom de $geoNear operator toegevoegd in 2.4 moet aan het begin van de pijplijn staan.

Zodra u de documenten muteert met $project , $group , of $unwind de index is niet langer geldig/bruikbaar.

Als u een index op een arrayveld heeft, kunt u deze nog steeds gebruiken vóór de $unwind om de selectie van documenten naar pijplijn te versnellen en vervolgens de geselecteerde documenten verder te verfijnen met een tweede $match .

Overweeg documenten als:

{ tags: [ 'cat', 'bird', 'blue' ] }

Met een index op tags .

Als u alleen de tags wilt groeperen die beginnen met b dan zou je een aggregatie kunnen uitvoeren zoals:

{ pipeline: [
      { $match : { tags : /^b/ } },
      { $unwind : '$tags' },
      { $match : { tags : /^b/ } },
      /* the rest */
  ] }

De eerste $match komt de grove korrel overeen met behulp van de index op tags .

De tweede wedstrijd na de $unwind zal de index niet kunnen gebruiken (het document hierboven bestaat nu uit 3 documenten) maar kan elk van die documenten evalueren om de extra documenten die worden aangemaakt eruit te filteren (om { tags :'cat' } uit het voorbeeld te verwijderen).

HTH - Rob.



  1. Mongo veld A groter dan veld B

  2. ClusterControl - Geavanceerd back-upbeheer - MongoDB

  3. 5 manieren om het uur van een date te krijgen in MongoDB

  4. Spring Boot Mongodb-zoekopdracht op ID retourneert null