Che struttura stai usando? Questa non è una shell MongoDB e sembra uno strano wrapper attorno a MapReduce. In tal caso $unwind non sarebbe disponibile e ne avrai bisogno per l'utente nel framework di aggregazione. Ecco cosa vuoi nella 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 } }
])
Così efficiente:
- Filtra per data perché hai già impostato una var negli ultimi 7 giorni
- Proietta solo i campi di cui abbiamo bisogno { Ne serve solo uno! }
- Srotolare l'array in modo da avere ora un record per ogni elemento dell'array in ogni documento
- Gruppo sull'Artista dai documenti espansi
- Proietta in un formato di documento che puoi usare come gruppo incasinato con _id
- Ordina i risultati in ordine inverso per vedere prima la parte superiore contrassegnata
E il bello dell'aggregazione è che puoi costruire gradualmente quelle fasi per vedere cosa sta succedendo.
Agitare e cuocere nel proprio framework di implementazione del driver o ODM come richiesto.