MongoDB Aggregation : analyser et filtrer des bases de données

MongoDB Aggregation est un outil précieux pour analyser ou filtrer vos bases de données. Grâce au système de pipeline, il est possible de spécifier les requêtes et donc les sorties de manière très individualisée.

Qu’est-ce que l’option Aggregation de MongoDB ?

MongoDB est une base de données non relationnelle et orientée documents, conçue pour être utilisée avec des volumes de données importants et variés. En renonçant aux tables rigides et aux techniques telles que le sharding, qui consiste à stocker les données sur différents nœuds, la solution NoSQL peut être mise à l’échelle horizontalement tout en restant très flexible et protégée contre les pannes. Les documents au format binaire JSON BSON sont regroupés dans ce que l’on appelle des collections et peuvent être interrogés et traités avec le MongoDB Query Language. Bien que ce langage offre de nombreuses options, il n’est pas ou peu adapté à l’analyse des données. Pour cela, MongoDB propose l’agrégation.

En informatique, ce terme désigne différentes opérations. Dans le cas de MongoDB, l’agrégation consiste à obtenir des informations synthétiques. Pour ce faire, les données d’un ou de plusieurs documents sont analysées et filtrées en fonction de certains facteurs définis. Ce processus aboutit à un résultat unique et clair. Dans ce qui suit, nous vous expliquons non seulement les possibilités d’analyse de données à grande échelle offertes par MongoDB Aggregation, mais nous vous montrons également comment utiliser la méthode aggregate ( ) pour le système de gestion de base de données à titre d’exemple.

MongoDB Aggregation : les conditions préalables

Si vous souhaitez utiliser MongoDB Aggregation, quelques conditions préalables doivent être remplies. La méthode est exécutée dans le shell et fonctionne selon des règles logiques que vous pouvez appliquer à vos besoins individuels. Pour cela, MongoDB doit déjà être installée sur votre ordinateur. Pour savoir comment télécharger, installer et exécuter la base de données pour la première fois, consultez notre tutoriel MongoDB très complet. De plus, vous devez utiliser un pare-feu performant et avoir déjà configuré votre base de données selon toutes les normes de sécurité courantes. Pour effectuer l’agrégation MongoDB, il vous faut des droits d’administration. La base de données fonctionne de manière multiplateforme, les étapes décrites plus loin sont donc valables pour tous les systèmes d’exploitation.

Le rôle du pipeline dans MongoDB Aggregation

Vous avez également la possibilité d’effectuer des recherches ou des requêtes simples dans MongoDB. La base de données vous fournira alors immédiatement les résultats souhaités. Cette méthode est toutefois très limitée, car elle ne peut afficher que les résultats qui existent déjà dans les documents déposés. Ce type de requête n’est pas prévu pour une analyse plus approfondie, des modèles récurrents ou des informations plus détaillées. Cependant, il est parfois nécessaire de prendre en compte différentes sources au sein d’une base de données afin de pouvoir tirer des conclusions pertinentes. C’est pour répondre à de telles exigences que MongoDB Aggregation est utilisé. Pour obtenir un résultat, la méthode utilise ce que l’on appelle des pipelines.

À quoi sert le pipeline ?

Les pipelines d’agrégation de MongoDB sont des processus dans lesquels les données existantes sont analysées et filtrées à l’aide de différentes étapes intermédiaires afin de pouvoir afficher le résultat recherché par les utilisateurs. Ces étapes intermédiaires sont appelées stages. Selon les exigences, un ou plusieurs peuvent être initiés. Ils sont alors exécutés les uns après les autres et modifient leur input initial de manière à ce que l’output recherché puisse être affiché à la fin. Alors que l’input se compose de nombreuses données, l’output, c’est-à-dire le résultat final, est unique.

Quelle est la syntaxe du pipeline de l’agrégation MongoDB ?

Tout d’abord, il vaut la peine de jeter un coup d’œil à la syntaxe de base de MongoDB Aggregation. La méthode est toujours construite selon le même schéma et peut ensuite être adaptée à vos besoins spécifiques. La structure de base se présente comme suit :

db.collection_name.aggregate ( pipeline, options )
shell

collection_name est le nom de la collection prise en compte. Pipeline liste les étapes nécessaires ou souhaitées de MongoDB Aggregation et options peut être utilisé pour d’autres paramètres optionnels qui spécifient la sortie nécessaire.

Quels sont les différents stages ?

Il existe de nombreux stages pour le pipeline dans MongoDB Aggregation. La plupart d’entre eux peuvent être utilisés plusieurs fois au sein d’un même pipeline. Il serait trop long d’énumérer toutes les options ici, d’autant plus que certaines ne sont nécessaires que pour des opérations très spécifiques. Toutefois, pour vous donner une idée, voici quelques stages parmi les plus utilisés :

  • $count : avec ce stage, vous obtenez une indication du nombre de documents BSON pris en compte pour le ou les stages de ce pipeline.
  • $group : ce stage trie et regroupe les documents selon certains paramètres.
  • $limit : ce stage permet de réduire le nombre de documents affichés.
  • $match : avec le stage $match, vous limitez les documents qui seront pris en compte pour le stage suivant.
  • $out : avec ce stage, les résultats de l’agrégation MongoDB sont intégrés dans la collection. Ce stage ne peut être utilisé que pour terminer un pipeline.
  • $project : avec $project, vous sélectionnez des champs spéciaux dans une collection.
  • $skip : ce stage permet d’ignorer un certain nombre de documents ; dont le nombre se définit avec une option.
  • $sort : permet de trier les documents selon la méthode de votre choix. Les documents ne sont toutefois pas modifiés.
  • $unset : $unset exclut certains champs et fonctionne donc en opposition à $project.

MongoDB Aggregation : exemples pratiques

Pour vous aider à comprendre comment fonctionne MongoDB Aggregation dans la pratique, nous allons maintenant vous montrer quelques exemples de différents stages et comment les utiliser. Si vous souhaitez utiliser MongoDB Aggregation, ouvrez le shell en tant qu’administrateur. Normalement, une base de données de test est d’abord affichée. Si vous souhaitez utiliser une autre base de données, vous pouvez utiliser la commande use.

Pour notre exemple, imaginons une base de données qui contient les données de clients qui ont acheté un certain produit. Pour des raisons de clarté, cette base de données ne contient que dix documents, tous structurés de la même manière :

{
"name" : "Durand",
"city" : "Brest",
"country" : "France",
"quantity" : 14
}
shell

Les informations connues de tous les acheteurs sont donc leur nom, leur lieu de résidence, leur pays et le nombre de produits achetés.

Si vous voulez maintenant essayer MongoDB Aggregation, utilisez la méthode insertMany ( ) pour ajouter tous les documents contenant des informations sur les clients à la collection « clients » :

db.clients.insertMany ( [
{ "name" : "Durand", "city" : "Brest", "country" : "France", "quantity" : 14 },
{ "name" : "Meyer", "city" : "Hamburg", "country" : "Germany", "quantity" : 26 },
{ "name" : "Lee", "city" : "Birmingham", "country" : "England", "quantity" : 5 },
{ "name" : "Rodriguez", "city" : "Madrid", "country" : "Spain", "quantity" : 19 },
{ "name" : "Nowak", "city" : "Krakow", "country" : "Poland", "quantity" : 13 },
{ "name" : "Rossi", "city" : "Milano", "country" : "Italy", "quantity" : 10 },
{ "name" : "Arslan", "city" : "Ankara", "country" : "Turkey", "quantity" : 18 },
{ "name" : "Martin", "city" : "Lyon", "country" : "France", "quantity" : 9 },
{ "name" : "Mancini", "city" : "Rome", "country" : "Italy", "quantity" : 21 },
{ "name" : "Schulz", "city" : "Munich", "country" : "Germany", "quantity": 2 }
] )
shell

Si vous effectuez cette saisie de cette manière, vous obtiendrez une liste d’ID d’objets pour chaque document.

Comment utiliser $match

Pour illustrer les possibilités offertes par MongoDB Aggregation, appliquons d’abord le stage $match à notre collection « clients ». Sans autre paramètre, celle-ci nous donnerait simplement la liste complète des données clients énumérées ci-dessus. Dans l’exemple suivant, nous demandons à la méthode de n’afficher que les clients originaires d’Italie. La commande correspondante est la suivante :

db.clients.aggregate ( [
{ $match : { "country" : "Italy" } }
] )
shell

La sortie ne vous montrera alors que les ID d’objets et les données des deux clients italiens.

$sort pour une meilleure vue d’ensemble

Si vous souhaitez trier votre base de données clients, vous pouvez utiliser MongoDB Aggregation avec la Stage $sort. Dans l’exemple suivant, nous demandons au système de classer toutes les données clients par nombre d’unités achetées, en commençant par le chiffre le plus élevé. L’entrée appropriée pour notre exemple est la suivante :

db.clients.aggregate ( [
{ $sort : { "quantity" : -1 } }
] )
shell

Limiter la sortie avec $project

En utilisant uniquement les stages vus jusqu’à présent, vous verrez que la sortie est relativement importante. Outre les informations proprement dites au sein des documents, l’ID de l’objet est par exemple toujours édité. Avec l’aide de $project, vous pouvez déterminer vous-même dans le pipeline d’agrégation MongoDB quelles informations doivent être éditées. Pour cela, nous définissons la valeur 1 pour les champs nécessaires et la valeur 0 pour les champs superflus. Dans notre exemple, nous souhaitons uniquement voir le nom du client et le nombre de produits achetés :

db.clients.aggregate ( [
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
] )
shell

Combiner plusieurs stages dans MongoDB Aggregation

MongoDB Aggregation vous donne également toujours la possibilité d’appliquer plusieurs stages à la suite. Celles-ci sont alors parcourues l’une après l’autre, et vous obtenez à la fin une sortie qui tient compte de tous les paramètres souhaités. Par exemple, si vous souhaitez simplement afficher les noms et les achats des clients français dans l’ordre décroissant, utilisez les stages décrits ci-dessus comme suit :

db.clients.aggregate ( [
{ $match : { "country" : "France" } }
{ $project : { _id : 0, name : 1, city : 0, country : 0, quantity : 1 } }
{ $sort : { "quantity" : -1 } }
] )
shell
Conseil

Vous souhaitez en savoir plus sur MongoDB ? Vous trouverez ce qu’il vous faut dans notre Digital Guide ! Nous vous expliquons par exemple comment fonctionne la commande List Databases et comment définir l’ordre de sortie de vos données avec MongoDB Sort.

Cet article vous a-t-il été utile ?
Page top