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

Grupuj MongoDB według elementów wewnętrznych tablicy

Jakie ramy używasz? To nie jest powłoka MongoDB i wygląda jak jakieś dziwne opakowanie wokół MapReduce. W takim przypadku $unwind nie byłby dostępny i potrzebujesz go dla użytkownika w ramach agregacji. Oto, co chcesz w powłoce mongo:

db.articles.aggregate([
  {$match: { class_date: { $gte: date } } },
  {$project: { _id: 0, class_artist: 1 } },
  {$unwind: "$class_artist" },
  {$group: { _id: "$class_artist", tags: { $sum: 1 } }},
  {$project: { _id: 0,class_artist: "$_id", tags: 1 } },
  {$sort: { tags: -1 } }
])

Tak wydajnie:

  1. Filtruj według daty, ponieważ już ustawiłeś zmienną dla ostatnich 7 dni
  2. Projektuj tylko te pola, których potrzebujemy { Potrzebujemy tylko jednego! }
  3. Rozwiń tablicę, dzięki czemu mamy teraz zapis dla każdego elementu tablicy w każdym dokumencie
  4. Grupuj na artyście z rozwiniętych dokumentów
  5. Projektuj do formatu dokumentu, którego możesz używać jako grupa bawiąca się _id
  6. Posortuj wyniki w odwrotnej kolejności, aby najpierw zobaczyć tagi u góry

Wspaniałą rzeczą w agregacji jest to, że możesz stopniowo budować te etapy, aby zobaczyć, co się dzieje.

Wstrząśnij i upiecz we własnej implementacji sterownika lub frameworku ODM zgodnie z wymaganiami.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Platforma agregująca nie może używać indeksów

  2. Duże przepływy danych przy użyciu pand

  3. Grupa MongoDB i suma z identyfikatorem jako kluczem

  4. Jak zainstalować MongoDB na Ubuntu 18.04

  5. Wdrażanie i konfiguracja fragmentów MongoDB za pomocą Ansible