Share via


Prise en main des pipelines d’agrégation

Le pipeline d’agrégation est un outil puissant qui permet aux développeurs d’effectuer une analyse et une manipulation avancées des données sur leurs collections. Le pipeline est une séquence d’opérations de traitement des données, qui sont effectuées sur des documents d’entrée pour produire une sortie calculée. Les étapes de pipeline traitent les documents d’entrée et passent le résultat à l’étape suivante. Chaque étape effectue une opération spécifique sur les données, comme le filtrage, le regroupement, le tri et la transformation.

Syntaxe de base

La syntaxe de base d’un pipeline d’agrégation est la suivante :

db.collection.aggregate([    { stage1 },    { stage2 },    ...    { stageN }])

Où db.collection est la collection MongoDB sur laquelle vous souhaitez effectuer l’agrégation, et stage1, stage2,..., stageN sont les étapes de pipeline que vous souhaitez appliquer.

Exemples d’étapes

Cosmos DB pour MongoDB fournit un large éventail d’étapes que vous pouvez utiliser dans votre pipeline, notamment :

  • $match : filtre les documents pour transmettre uniquement les documents qui correspondent à la condition spécifiée.
  • $project : transforme les documents en un nouveau formulaire en ajoutant, en supprimant ou en mettant à jour des champs.
  • $group : regroupe les documents par un ou plusieurs champs et effectue différentes fonctions d’agrégation sur les données regroupées.
  • $sort : trie les documents en fonction des champs spécifiés.
  • $skip : Ignore le nombre spécifié de documents.
  • $limit : limite le nombre de documents passés à l’étape suivante.
  • $unwind : déconstruit un champ de tableau à partir des documents d’entrée pour générer un document pour chaque élément.

Pour afficher toutes les étapes disponibles, consultez Fonctionnalités prises en charge

Exemples

Voici quelques exemples de la façon dont vous pouvez utiliser le pipeline d’agrégation pour effectuer diverses opérations sur vos données :

Filtrage : pour filtrer les documents dont le champ « quantity » est supérieur à 20, vous pouvez utiliser le pipeline suivant :

db.collection.aggregate([
    { $match: { quantity: { $gt: 20 } } }
])

Regroupement : pour regrouper des documents en fonction du champ « catégory » et calculer la « quantity » totale pour chaque groupe, vous pouvez utiliser le pipeline suivant :

db.collection.aggregate([
    { $group: { _id: "$category", totalQuantity: { $sum: "$quantity" } } }
])

Tri : pour trier des documents par le champ « price » dans l’ordre décroissant, vous pouvez utiliser le pipeline suivant :

db.collection.aggregate([
    { $sort: { price: -1 } }
])

Transformation : pour ajouter un nouveau champ « discount » aux documents dont le « price » est supérieur à 100, vous pouvez utiliser le pipeline suivant :

db.collection.aggregate([
    { $project: { item: 1, price: 1, discount: { $cond: [{ $gt: ["$price", 100] }, 10, 0 ] } } }
])

Déroulement : pour séparer tous les sous-documents du champ de tableau « tags » et créer un document pour chaque valeur, vous pouvez utiliser le pipeline suivant :

db.collection.aggregate([
    { $unwind: "$tags" }
])

Exemple avec plusieurs étapes

db.sales.aggregate([
  { $match: { date: { $gte: "2021-01-01", $lt: "2021-03-01" } } },
  { $group: { _id: "$category", totalSales: { $sum: "$sales" } } },
  { $sort: { totalSales: -1 } },
  { $limit: 5 }
])

Dans cet exemple, nous utilisons un exemple de collection appelé « sales » qui contient des documents avec les champs suivants : « date », « category » et « sales ».

La première étape { $match : { date : { $gte: "2021-01-01", $lt : "2021-03-01" } } } filtre les documents par le champ « date », en transmettant uniquement les documents dont la date est comprise entre le 1er janvier 2021 et le 28 février 2021. Nous utilisons un format de date de chaîne au format « AAAA-MM-JJ ».

La deuxième étape { $group: { _id: "$category", totalSales : { $sum : "$sales" } } } regroupe les documents par le champ « category » et calcule les ventes totales pour chaque groupe.

La troisième étape { $sort : { totalSales : -1 } } trie les documents selon le champ « totalSales » dans l’ordre décroissant.

La quatrième étape { $limit : 5 } limite le nombre de documents passés à l’étape suivante uniquement aux 5 premiers.

Par conséquent, le pipeline retourne les 5 premières catégories par ventes totales pour la plage de dates spécifiée.

Étapes suivantes