Каква рамка използвате? Това не е обвивка на MongoDB и изглежда като някаква странна обвивка около MapReduce. В този случай $unwind няма да е наличен и ви е необходим за потребител в рамката за агрегиране. Ето какво искате в mongo shell:
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 } }
])
Толкова ефективно:
- Филтрирайте по дата, защото вече сте задали променлива за последните 7 дни
- Проектирайте само полето или полетата, от които се нуждаем { Нуждаем се само от едно! }
- Развъртете масива, така че вече имаме запис за всеки елемент от масива във всеки документ
- Групиране на изпълнителя от разширените документи
- Проектирайте във формат на документ, който можете да използвате като група, объркана с _id
- Сортирайте резултатите в обратен ред, за да видите първо най-маркираните
И страхотното нещо при агрегирането е, че можете постепенно да изградите тези етапи, за да видите какво се случва.
Разклатете и изпечете във вашия собствен драйвер за внедряване или ODM рамка, както е необходимо.