Pipelines d'agrégation
Introduction aux pipelines d'agrégation
Les pipelines d'agrégation permettent de traiter et d'analyser des données dans MongoDB.
Les pipelines sont composés d'étapes successives qui modifient et filtrent les données.
Utilisation de la commande db.collection.aggregate() pour exécuter des pipelines d'agrégation.
Les étapes du pipeline
$match: Filtrer les documents en fonction de conditions spécifiques.
Exemple: {$match: {age: {$gt: 18}}}
$project: Sélectionner, renommer ou ajouter des champs aux documents.
Exemple: {$project: {_id: 0, nom: 1, age: 1}}
Exemple: {$unwind: '$hobbies'}
$group: Regrouper des documents par un ou plusieurs champs.
Exemple: {$group: {_id: '$categorie', total: {$sum: 1}}}
$sort: Trier les documents en fonction de critères spécifiés.
Exemple: {$sort: {total: -1}}
$limit: Limiter le nombre de documents retournés.
$skip: Ignorer un certain nombre de documents en début de pipeline.
$lookup: Joindre des documents d'une autre collection.
Exemple: {$lookup: {from: 'orders', localField: '_id', foreignField: 'customer_id', as: 'customer_orders'}}
$out: Écrire le résultat du pipeline dans une nouvelle collection.
Exemple: {$out: 'result_collection'}
Optimisation des pipelines d'agrégation
Placer les étapes de filtrage ($match) en début de pipeline pour réduire la quantité de données à traiter.
Utiliser $project pour limiter les champs conservés et réduire la taille des documents.
Placer $sort avant $group lorsque c'est possible pour utiliser des index de tri.
Utiliser l'option "allowDiskUse" pour traiter de grandes quantités de données.
Exemples de pipelines d'agrégation
Exemple 1: Compter le nombre de documents par catégorie et les trier par ordre décroissant.
db.collection.aggregate([{$group: {_id: '$categorie', total: {$sum: 1}}}, {$sort: {total: -1}}])
Exemple 2: Extraire les 10 clients ayant passé le plus de commandes.
db.customers.aggregate([{$lookup: {from: 'orders', localField: '_id', foreignField: 'customer_id', as: 'customer_orders'}}, {$project: {name: 1, order_count: {$size: '$customer_orders'}}}, {$sort: {order_count: -1}}, {$limit: 10}])