Comment utiliser le pipeline d’agrégation dans MongoDB

Le pipeline d’agrégation est le moyen recommandé pour exécuter des requêtes complexes dans MongoDB. Si vous avez utilisé MapReduce de MongoDB, il est préférable de passer au pipeline d’agrégation pour des calculs plus efficaces.

Qu’est-ce que l’agrégation dans MongoDB et comment fonctionne-t-elle ?

Le pipeline d’agrégation est un processus en plusieurs étapes permettant d’exécuter des requêtes avancées dans MongoDB. Il traite les données à travers différentes étapes appelées pipeline. Vous pouvez utiliser les résultats générés à un niveau comme modèle d’opération à un autre niveau.

Par exemple, vous pouvez transmettre le résultat d’une opération de correspondance à une autre étape pour qu’il soit trié dans cet ordre jusqu’à ce que vous obteniez le résultat souhaité.

Chaque étape d’un pipeline d’agrégation comporte un opérateur MongoDB et génère un ou plusieurs documents transformés. En fonction de votre requête, un niveau peut apparaître plusieurs fois dans le pipeline. Par exemple, vous pouvez avoir besoin d’utiliser l’opérateur $count ou $sort se déroule plus d’une fois dans le pipeline d’agrégation.

Les étapes du pipeline d’agrégation

Le pipeline d’agrégation fait passer les données par plusieurs étapes au cours d’une seule requête. Il existe plusieurs étapes, dont vous trouverez les détails dans la section documentation de MongoDB.

Définissons ci-dessous quelques-unes des étapes les plus couramment utilisées.

L’étape $match

Cette étape vous permet de définir des conditions de filtrage spécifiques avant de lancer les autres étapes d’agrégation. Vous pouvez l’utiliser pour sélectionner les données correspondantes que vous souhaitez inclure dans le pipeline d’agrégation.

L’étape $group

L’étape du groupe sépare les données en différents groupes sur la base de critères spécifiques à l’aide de paires clé-valeur. Chaque groupe représente une clé dans le document de sortie.

Voir aussi :  Comment ouvrir un fichier JAR en utilisant la ligne de commande

Par exemple, considérons ce qui suit ventes exemple de données :

En utilisant le pipeline d’agrégation, vous pouvez calculer le nombre total de ventes et les meilleures ventes pour chaque section de produit :

Les _id : $Section regroupe le document de sortie en fonction des sections. En spécifiant la paire top_sales_count et top_sales MongoDB crée de nouvelles clés sur la base de l’opération définie par l’agrégateur ; il peut s’agir de $sum, $min, $max ou $avg.

L’étape $skip

Vous pouvez utiliser l’étape $skip pour omettre un certain nombre de documents dans le résultat. Cette étape vient généralement après l’étape du groupe. Par exemple, si vous attendez deux documents en sortie mais que vous en omettez un, l’agrégation ne produira que le deuxième document.

Pour ajouter une étape de saut, insérez l’élément $skip dans le pipeline d’agrégation :

L’étape $sort

L’étape du tri vous permet de classer les données par ordre décroissant ou croissant. Par exemple, nous pouvons trier les données de l’exemple de requête précédent par ordre décroissant afin de déterminer la section qui enregistre les ventes les plus élevées.

Ajoutez le $sort à la requête précédente :

L’étape $limit

L’opération de limitation permet de réduire le nombre de documents de sortie que le pipeline d’agrégation doit afficher. Par exemple, utilisez l’opérateur $limit pour obtenir la section avec les ventes les plus élevées renvoyées par l’étape précédente :

L’opérateur ci-dessus ne renvoie que le premier document ; il s’agit de la section avec les ventes les plus élevées, puisqu’elle apparaît en haut de la sortie triée.

Voir aussi :  Comment construire une API GraphQL avec Apollo Server et MongoDB

L’étape $project

Le $projet vous permet de façonner le document de sortie comme vous le souhaitez. En utilisant l’étape $projet vous pouvez spécifier le champ à inclure dans le document de sortie et personnaliser son nom de clé.

Par exemple, un exemple de sortie sans l’opérateur $projet ressemble à ceci :

Voyons ce que cela donne avec l’étape $projet . Pour ajouter l’étape $projet au pipeline :

Étant donné que nous avons précédemment regroupé les données en fonction des sections de produits, la procédure ci-dessus inclut chaque section de produit dans le document de sortie. Il garantit également que le nombre de ventes agrégées et les ventes les plus importantes figurent dans le document de sortie en tant que Total des ventes et TopSale.

La sortie finale est beaucoup plus propre que la précédente :

L’étape $unwind

L’étape $unwind décompose un tableau à l’intérieur d’un document en documents individuels. Prenons l’exemple suivant Les commandes par exemple :

Utilisez les données $unwind pour déconstruire l’étape éléments avant d’appliquer d’autres étapes d’agrégation. Par exemple, le déroulement du tableau éléments est utile si vous souhaitez calculer le revenu total pour chaque produit :

Voici le résultat de la requête d’agrégation ci-dessus :

Comment créer un pipeline d’agrégation dans MongoDB

Bien que le pipeline d’agrégation comprenne plusieurs opérations, les étapes présentées précédemment vous donnent une idée de la façon de les appliquer dans le pipeline, y compris la requête de base pour chacune d’entre elles.

En utilisant les étapes précédentes ventes nous allons regrouper certaines des étapes évoquées ci-dessus pour obtenir une vue plus large du pipeline d’agrégation :

Voir aussi :  Pourquoi YOLO-NAS est-il le meilleur modèle de détection d'objets de la série YOLO ?

Le résultat final ressemble à ce que vous avez déjà vu :

Pipeline d’agrégation vs. MapReduce

Jusqu’à sa suppression à partir de MongoDB 5.0, la méthode conventionnelle d’agrégation des données dans MongoDB était MapReduce. Bien que MapReduce ait des applications plus larges que MongoDB, il est moins efficace que le pipeline d’agrégation, nécessitant des scripts tiers pour écrire les fonctions map et reduce séparément.

Le pipeline d’agrégation, quant à lui, est spécifique à MongoDB. Mais il offre un moyen plus propre et plus efficace d’exécuter des requêtes complexes. Outre la simplicité et l’évolutivité des requêtes, les étapes du pipeline permettent de personnaliser davantage le résultat.

Il existe de nombreuses autres différences entre le pipeline d’agrégation et MapReduce. Vous les verrez lorsque vous passerez de MapReduce au pipeline d’agrégation.

Rendre les requêtes Big Data efficaces dans MongoDB

Votre requête doit être aussi efficace que possible si vous souhaitez effectuer des calculs approfondis sur des données complexes dans MongoDB. Le pipeline d’agrégation est idéal pour les requêtes avancées. Plutôt que de manipuler les données dans des opérations distinctes, ce qui réduit souvent les performances, l’agrégation vous permet de les regrouper dans un seul pipeline performant et de les exécuter une seule fois.

Bien que le pipeline d’agrégation soit plus efficace que MapReduce, vous pouvez rendre l’agrégation plus rapide et plus efficace en indexant vos données. Cela limite la quantité de données que MongoDB doit analyser à chaque étape de l’agrégation.

Cliquez pour évaluer cet article !
[Total: Moyenne : ]

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *