Utilisation des opérateurs d’agrégation (match, group, project, sort, limit, unwind)

MongoDB fournit un ensemble d'opérateurs pour manipuler les documents à chaque étape du pipeline. Voici quelques opérateurs courants.

$match : Filtrage des documents

L'opérateur $match est utilisé pour filtrer les documents en fonction de critères donnés, similaire à une clause WHERE dans SQL.

db.ventes.aggregate([
  { $match: { "produit": "Ordinateur", "quantité": { $gt: 10 } } }
])

Ici, nous récupérons les ventes où le produit est "Ordinateur" et où la quantité vendue est supérieure à 10.

$group : Regroupement et calculs agrégés

L'opérateur $group est utilisé pour regrouper les documents en fonction d'un champ spécifique et pour calculer des valeurs agrégées comme la somme, la moyenne, le minimum ou le maximum.

db.ventes.aggregate([
  { $group: { _id: "$produit", total_ventes: { $sum: "$montant" }, moyenne_ventes: { $avg: "$montant" } } }
])

Ce pipeline regroupe les ventes par produit, calcule la somme totale des montants pour chaque produit et la moyenne des montants.

$project : Transformation des documents

L'opérateur $project permet de spécifier quels champs doivent être inclus ou exclus dans la sortie, et de créer de nouveaux champs calculés.

db.clients.aggregate([
  { $project: { nom_complet: { $concat: ["$prenom", " ", "$nom"] }, age: 1, ville: 1, _id: 0 } }
])

Ici, on crée un nouveau champ nom_complet en combinant les champs prenom et nom, tout en affichant uniquement les champs age et ville.

$sort : Tri des résultats

L'opérateur $sort est utilisé pour trier les résultats selon un ou plusieurs champs, de manière croissante ou décroissante.

db.ventes.aggregate([
  { $sort: { montant: -1 } }
])

Cela trie les ventes par montant, du plus élevé au plus bas.

$limit et $skip : Limitation et décalage des résultats

  • $limit : Limite le nombre de documents retournés par l'agrégation.

  • $skip : Ignore un nombre défini de documents avant de commencer à retourner les résultats.

db.ventes.aggregate([
  { $sort: { montant: -1 } },
  { $limit: 5 }
])

Cela retourne les 5 ventes les plus élevées.

$unwind : Décomposition des tableaux

L'opérateur $unwind permet de "décompresser" un tableau, créant un document distinct pour chaque élément du tableau. C'est utile pour travailler avec des documents qui contiennent des champs de type tableau.

db.clients.aggregate([
  { $unwind: "$hobbies" },
  { $group: { _id: "$hobbies", total_clients: { $sum: 1 } } }
])

Cela regroupe les clients en fonction de leurs hobbies et compte combien de clients partagent chaque hobby.

Last updated