Aller au contenu

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 avantages incluent la flexibilité, l'expressivité et la performance.#

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}}

$unwind: Transformer un champ de type tableau en plusieurs documents.#

    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.#

    Exemple: {$limit: 10}

$skip: Ignorer un certain nombre de documents en début de pipeline.#

    Exemple: {$skip: 20}

$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}])