MongoDB Ag­gre­ga­tion 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 in­di­vi­dua­li­sée.

Qu’est-ce que l’option Ag­gre­ga­tion de MongoDB ?

MongoDB est une base de données non re­la­tion­nelle et orientée documents, conçue pour être utilisée avec des volumes de données im­por­tants et variés. En renonçant aux tables rigides et aux tech­niques telles que le sharding, qui consiste à stocker les données sur dif­fé­rents nœuds, la solution NoSQL peut être mise à l’échelle ho­ri­zon­ta­le­ment 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 col­lec­tions et peuvent être in­ter­ro­gés et traités avec le MongoDB Query Language. Bien que ce langage offre de nom­breuses options, il n’est pas ou peu adapté à l’analyse des données. Pour cela, MongoDB propose l’agré­ga­tion.

En in­for­ma­tique, ce terme désigne dif­fé­rentes opé­ra­tions. Dans le cas de MongoDB, l’agré­ga­tion consiste à obtenir des in­for­ma­tions syn­thé­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 ex­pli­quons non seulement les pos­si­bi­li­tés d’analyse de données à grande échelle offertes par MongoDB Ag­gre­ga­tion, 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 Ag­gre­ga­tion : les con­di­tions préa­lables

Si vous souhaitez utiliser MongoDB Ag­gre­ga­tion, quelques con­di­tions préa­lables doivent être remplies. La méthode est exécutée dans le shell et fonc­tionne selon des règles logiques que vous pouvez appliquer à vos besoins in­di­vi­duels. Pour cela, MongoDB doit déjà être installée sur votre or­di­na­teur. Pour savoir comment té­lé­char­ger, 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 per­for­mant et avoir déjà configuré votre base de données selon toutes les normes de sécurité courantes. Pour effectuer l’agré­ga­tion MongoDB, il vous faut des droits d’ad­mi­nis­tra­tion. La base de données fonc­tionne de manière mul­ti­pla­te­forme, les étapes décrites plus loin sont donc valables pour tous les systèmes d’ex­ploi­ta­tion.

Le rôle du pipeline dans MongoDB Ag­gre­ga­tion

Vous avez également la pos­si­bi­lité d’effectuer des re­cherches ou des requêtes simples dans MongoDB. La base de données vous fournira alors im­mé­dia­te­ment 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 ap­pro­fon­die, des modèles ré­cur­rents ou des in­for­ma­tions plus dé­tail­lées. Cependant, il est parfois né­ces­saire de prendre en compte dif­fé­rentes sources au sein d’une base de données afin de pouvoir tirer des con­clu­sions per­ti­nentes. C’est pour répondre à de telles exigences que MongoDB Ag­gre­ga­tion 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é­ga­tion de MongoDB sont des processus dans lesquels les données exis­tantes sont analysées et filtrées à l’aide de dif­fé­rentes étapes in­ter­mé­diaires afin de pouvoir afficher le résultat recherché par les uti­li­sa­teurs. Ces étapes in­ter­mé­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 nom­breuses données, l’output, c’est-à-dire le résultat final, est unique.

Quelle est la syntaxe du pipeline de l’agré­ga­tion MongoDB ?

Tout d’abord, il vaut la peine de jeter un coup d’œil à la syntaxe de base de MongoDB Ag­gre­ga­tion. La méthode est toujours cons­truite selon le même schéma et peut ensuite être adaptée à vos besoins spé­ci­fiques. La structure de base se présente comme suit :

db.collection_name.aggregate ( pipeline, options )
shell

collection_name est le nom de la col­lec­tion prise en compte. Pipeline liste les étapes né­ces­saires ou sou­hai­tées de MongoDB Ag­gre­ga­tion et options peut être utilisé pour d’autres pa­ra­mètres op­tion­nels qui spé­ci­fient la sortie né­ces­saire.

Quels sont les dif­fé­rents stages ?

Il existe de nombreux stages pour le pipeline dans MongoDB Ag­gre­ga­tion. 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é­ces­saires que pour des opé­ra­tions très spé­ci­fiques. Toutefois, pour vous donner une idée, voici quelques stages parmi les plus utilisés :

  • $count : avec ce stage, vous obtenez une in­di­ca­tion 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 pa­ra­mè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é­ga­tion MongoDB sont intégrés dans la col­lec­tion. Ce stage ne peut être utilisé que pour terminer un pipeline.
  • $project : avec $project, vous sé­lec­tion­nez des champs spéciaux dans une col­lec­tion.
  • $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 fonc­tionne donc en op­po­si­tion à $project.

MongoDB Ag­gre­ga­tion : exemples pratiques

Pour vous aider à com­prendre comment fonc­tionne MongoDB Ag­gre­ga­tion dans la pratique, nous allons main­te­nant vous montrer quelques exemples de dif­fé­rents stages et comment les utiliser. Si vous souhaitez utiliser MongoDB Ag­gre­ga­tion, ouvrez le shell en tant qu’ad­mi­nis­tra­teur. Nor­ma­le­ment, 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 struc­tu­rés de la même manière :

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

Les in­for­ma­tions 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 main­te­nant essayer MongoDB Ag­gre­ga­tion, utilisez la méthode insertMany ( ) pour ajouter tous les documents contenant des in­for­ma­tions sur les clients à la col­lec­tion « 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 ob­tien­drez une liste d’ID d’objets pour chaque document.

Comment utiliser $match

Pour illustrer les pos­si­bi­li­tés offertes par MongoDB Ag­gre­ga­tion, ap­pli­quons d’abord le stage $match à notre col­lec­tion « clients ». Sans autre paramètre, celle-ci nous donnerait sim­ple­ment 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 ori­gi­naires d’Italie. La commande cor­res­pon­dante 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 Ag­gre­ga­tion 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 com­men­çant par le chiffre le plus élevé. L’entrée ap­pro­priée pour notre exemple est la suivante :

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

Limiter la sortie avec $project

En utilisant uni­que­ment les stages vus jusqu’à présent, vous verrez que la sortie est re­la­ti­ve­ment im­por­tante. Outre les in­for­ma­tions pro­pre­ment dites au sein des documents, l’ID de l’objet est par exemple toujours édité. Avec l’aide de $project, vous pouvez dé­ter­mi­ner vous-même dans le pipeline d’agré­ga­tion MongoDB quelles in­for­ma­tions doivent être éditées. Pour cela, nous dé­fi­nis­sons la valeur 1 pour les champs né­ces­saires et la valeur 0 pour les champs superflus. Dans notre exemple, nous sou­hai­tons uni­que­ment 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 Ag­gre­ga­tion

MongoDB Ag­gre­ga­tion vous donne également toujours la pos­si­bi­lité d’appliquer plusieurs stages à la suite. Celles-ci sont alors par­cou­rues l’une après l’autre, et vous obtenez à la fin une sortie qui tient compte de tous les pa­ra­mètres souhaités. Par exemple, si vous souhaitez sim­ple­ment afficher les noms et les achats des clients français dans l’ordre dé­crois­sant, 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 ex­pli­quons par exemple comment fonc­tionne la commande List Databases et comment définir l’ordre de sortie de vos données avec MongoDB Sort.

Aller au menu principal