Ce chapitre présente le Pipeline d'Aggrégation MongoDB, principalement utilisé pour l'analyse statistique, similaire à l'instruction group by en SQL. Dans le shell MongoDB, l'analyse statistique est réalisée grâce à la fonction db.collection.aggregate().

Concept

Le Pipeline d'Aggrégation est un concept abstrait qui traite les données comme de l'eau circulant dans un tuyau. Nous pouvons traiter les données en plusieurs étapes dans le pipeline. Après qu'une étape ait traité les données, les résultats sont transmis à l'étape suivante pour un traitement ultérieur.

Exemples d'application du pipeline d'aggrégation dans l'analyse statistique :

  • Dans la première étape, un lot de données de documents est récupéré depuis la collection en fonction de certaines conditions.
  • Dans la deuxième étape, les données de documents récupérées sont regroupées et agrégées.
  • Dans la troisième étape, les données agrégées de la deuxième étape sont triées.

L'ensemble du processus ressemble à une opération de pipeline où les données entrent d'un bout du tuyau, subissent un traitement à travers plusieurs étapes, puis produisent un résultat final.

Opérateurs Supportés par le Pipeline MongoDB

Voici quelques opérateurs de pipeline couramment supportés par MongoDB :

Opérateur Description
$match La phase $match est utilisée pour filtrer les données de documents selon des conditions, similaire à la condition where en SQL.
$group La phase $group est utilisée pour regrouper et agréger les données de documents, similaire à la clause group by en SQL.
$sort Utilisé pour trier les données.

Étapes pour Utiliser le Pipeline d'Aggrégation

Typiquement, trois étapes sont impliquées :

  • Filtrer les données cibles à l'aide de $match.
  • Regrouper et agréger les données à l'aide de $group.
  • Trier les résultats à l'aide de $sort (optionnel).

Exemple :

db.orders.aggregate([
                     { $match: { status: "A" } },
                     { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
                     { $sort: { total: -1 } }
                   ])

SQL équivalent :

select sum(amount) as total from orders 
		where status="A" 
		group by cust_id 
		order by total desc

Remarque : Pour plus d'informations sur l'analyse statistique agrégée, veuillez vous référer aux chapitres ultérieurs.