MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Groupe MongoDB par éléments internes du tableau

Quel cadre utilisez-vous ? Ce n'est pas le shell MongoDB et ressemble à un wrapper étrange autour de MapReduce. Dans ce cas, $unwind ne serait pas disponible et vous en avez besoin pour l'utilisateur dans le cadre d'agrégation. Voici ce que vous voulez dans le shell 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 } }
])

Si efficacement :

  1. Filtrer par date, car vous avez déjà défini une variable pour les 7 derniers jours
  2. Projeter uniquement le(s) champ(s) dont nous avons besoin { Nous n'en avons besoin que d'un ! }
  3. Déroulez le tableau afin que nous ayons maintenant un enregistrement pour chaque élément du tableau dans chaque document
  4. Groupe sur l'artiste à partir des documents développés
  5. Projeter dans un format de document que vous pouvez utiliser en groupe avec _id
  6. Trier les résultats dans l'ordre inverse pour voir le top tagué en premier

Et l'avantage de l'agrégation est que vous pouvez progressivement créer ces étapes pour voir ce qui se passe.

Secouez et intégrez votre propre implémentation de pilote ou cadre ODM selon vos besoins.