MongoDB : Comment regrouper par et additionner



Vous pouvez utiliser la syntaxe suivante pour regrouper et compter dans MongoDB :

db.collection.aggregate([
    {$group : {_id:"$field_name1", count:{$sum:"$field_name2"}}}
])

Notez que field_name1 est le champ par lequel vous souhaitez regrouper et field_name2 est le champ que vous souhaitez additionner.

Les exemples suivants montrent comment utiliser cette syntaxe avec une équipe de collection avec les documents suivants :

db.teams.insertOne({team: "Mavs", position: "Guard", points: 31})
db.teams.insertOne({team: "Spurs", position: "Forward", points: 22})
db.teams.insertOne({team: "Rockets", position: "Center", points: 19})
db.teams.insertOne({team: "Warriors", position: "Forward", points: 26})
db.teams.insertOne({team: "Cavs", position: "Guard", points: 33})

Exemple 1 : regrouper par et somme

Nous pouvons utiliser le code suivant pour regrouper par champ « position » et compter la somme des points pour chaque position.

db.teams.aggregate([
    {$group : {_id:"$position", count:{$sum:"$points"}}}
])

Cela renvoie les résultats suivants :

{ _id: 'Forward', count: 48 }
{ _id: 'Guard', count: 64 }
{ _id: 'Center', count: 19 }

Cela nous dit :

  • Les joueurs ayant la position « Attaquant » ont un total de 48 points.
  • Les joueurs avec la position « Garde » ont un total de 64 points.
  • Les joueurs ayant la position « Centre » ont un total de 19 points.

Exemple 2 : regrouper par et additionner (puis trier)

Nous pouvons utiliser le code suivant pour trouver la somme des points pour chaque position et trier automatiquement les résultats par ordre croissant :

db.teams.aggregate([
    {$group : {_id:"$position", count:{$sum:"$points"}}},
    {$sort: {count:1}} 
])

Cela renvoie les résultats suivants :

{ _id: 'Center', count: 19 }
{ _id: 'Forward', count: 48 }
{ _id: 'Guard', count: 64 }

Les résultats sont triés par points par ordre croissant (du plus petit au plus grand).

Nous pouvons utiliser -1 dans l’argument count pour trier les résultats par ordre décroissant :

db.teams.aggregate([
    {$group : {_id:"$position", count:{$sum:"$points"}}},
    {$sort: {count:-1}} 
])

Cela renvoie les résultats suivants :

{ _id: 'Guard', count: 64 }
{ _id: 'Forward', count: 48 }
{ _id: 'Center', count: 19 }

Notez que les résultats sont triés par points par ordre décroissant (du plus grand au plus petit).

Remarque : Vous pouvez trouver la documentation complète de $group ici .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres opérations courantes dans MongoDB :

MongoDB : Comment compter les valeurs distinctes dans un champ
MongoDB : Comment regrouper par plusieurs champs
MongoDB : Comment regrouper par et compter

Ajouter un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *