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:
- Filtruj według daty, ponieważ już ustawiłeś zmienną dla ostatnich 7 dni
- Projektuj tylko te pola, których potrzebujemy { Potrzebujemy tylko jednego! }
- Rozwiń tablicę, dzięki czemu mamy teraz zapis dla każdego elementu tablicy w każdym dokumencie
- Grupuj na artyście z rozwiniętych dokumentów
- Projektuj do formatu dokumentu, którego możesz używać jako grupa bawiąca się _id
- 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.