MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Potok agregacji i indeksy

Ogólnie tylko operatory potoku, które można spłaszczyć do normalnego zapytania ($match , $limit , $sort i $skip ) będą mogli używać indeksów w kolekcji. To jeden z powodów, dla których $geoNear operator dodany w 2.4 musi być na początku potoku.

Po zmutowaniu dokumentów za pomocą $project , $group lub $unwind indeks nie jest już ważny/użyteczny.

Jeśli masz indeks w polu tablicy, nadal możesz go używać przed $unwind w celu przyspieszenia wyboru dokumentów do potoku, a następnie dalszego udoskonalenia wybranych dokumentów za pomocą drugiego $match .

Rozważ dokumenty takie jak:

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

Z indeksem na tags .

Jeśli chcesz tylko pogrupować tagi zaczynające się od b wtedy możesz przeprowadzić agregację, taką jak:

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

Pierwszy $match czy grube ziarno pasuje do indeksu tags .

Drugie dopasowanie po $unwind nie będzie mógł korzystać z indeksu (powyższy dokument zawiera teraz 3 dokumenty), ale może ocenić każdy z tych dokumentów, aby odfiltrować dodatkowe dokumenty, które zostaną utworzone (aby usunąć { tagi :'cat' } z przykładu).

HTH - Rob.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak uzyskać pokolorowane dane wyjściowe zapytania i powłokę w MongoDB?

  2. Czy można inicjować eksporty asynchronicznie w module node.js?

  3. Agregacja Mongo

  4. Czy istnieje sposób na "ładne" wydrukowanie danych wyjściowych powłoki MongoDB do pliku?

  5. Dane wiosenne MongoDb:MappingMongoConverter usuń _class