MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Конвейер за агрегиране и индекси

Обикновено само конвейерни оператори, които могат да бъдат сведени до нормална заявка ($match , $limit , $sort и $skip ) ще могат да използват индексите на колекция. Това е една от причините $geoNear операторът, добавен в 2.4, трябва да бъде в началото на конвейера.

След като промените документите с $project , $group или $unwind индексът вече не е валиден/използваем.

Ако имате индекс на поле от масив, пак можете да го използвате преди $unwind за да ускорите избора на документи за конвейер и след това допълнително да прецизирате избраните документи с второ $match .

Помислете за документи като:

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

С индекс на tags .

Ако искате да групирате само етикетите, започващи с b тогава можете да извършите агрегиране като:

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

Първият $match съвпада ли грубото зърно с помощта на индекса на tags .

Вторият мач след $unwind няма да може да използва индекса (документът по-горе вече е 3 документа), но може да оцени всеки от тези документи, за да филтрира допълнителните документи, които се създават (за да премахнете { tags :'cat' } от примера).

HTH - Роб.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. mongoexport обобщен експорт в csv файл

  2. 6 най-добри практики за внедряване на MongoDB на Amazon EC2

  3. Създаване на схеми на Mongoose със или без ключова дума „нова“?

  4. MongoDB има ли вграден REST интерфейс?

  5. Метеор $и с $или