Introduction
Dans ce laboratoire, vous apprendrez à transformer des données dans MongoDB en utilisant son puissant pipeline d'agrégation (aggregation pipeline). Le pipeline d'agrégation vous permet de traiter les données à travers une série d'étapes, permettant des transformations complexes, des analyses et la génération de rapports. Vous commencerez par configurer un ensemble de données d'exemple, puis vous parcourrez plusieurs techniques de transformation clés, notamment la sélection et le renommage de champs, le calcul de nouveaux champs à partir de données existantes, le formatage de la sortie et le filtrage de documents selon des critères spécifiques. À la fin de ce laboratoire, vous aurez une base solide pour manipuler des données au sein de MongoDB.
Configuration et sélection de champs de base
Dans cette première étape, vous allez vous connecter au serveur MongoDB, créer une base de données et une collection, et insérer des données d'exemple. Ensuite, vous effectuerez votre première transformation de données en sélectionnant et en renommant des champs spécifiques des documents.
Tout d'abord, ouvrez votre terminal et lancez le Shell MongoDB (mongosh). Ce shell interactif est le moyen principal d'interagir avec votre instance MongoDB. Vous effectuerez toutes les opérations de base de données dans ce shell pour le reste du laboratoire.
mongosh
Une fois que vous êtes dans le Shell MongoDB, votre invite changera. Maintenant, créez et basculez vers une nouvelle base de données nommée bookstore. Si la base de données n'existe pas, cette commande la créera.
use bookstore
Ensuite, créez une collection nommée books et insérez-y trois documents d'exemple en utilisant la commande insertMany. Une collection est un groupe de documents, similaire à une table dans une base de données SQL.
db.books.insertMany([
{
title: "MongoDB Basics",
author: "Jane Smith",
price: 29.99,
pages: 250,
categories: ["Database", "Programming"]
},
{
title: "Python Deep Dive",
author: "John Doe",
price: 39.99,
pages: 450,
categories: ["Programming", "Python"]
},
{
title: "Data Science Handbook",
author: "Alice Johnson",
price: 49.99,
pages: 600,
categories: ["Data Science", "Programming"]
}
]);
Maintenant que vous avez des données, utilisons le pipeline d'agrégation pour les transformer. La méthode aggregate prend un tableau d'étapes (stages), où chaque étape effectue une opération sur les données. Notre première étape sera $project, qui remodèle les documents.
Exécutez la commande suivante pour sélectionner uniquement les champs title et author, en les renommant respectivement en bookTitle et bookAuthor.
db.books.aggregate([
{
$project: {
_id: 0,
bookTitle: "$title",
bookAuthor: "$author"
}
}
]);
Vous devriez voir la sortie suivante :
[
{ "bookTitle": "MongoDB Basics", "bookAuthor": "Jane Smith" },
{ "bookTitle": "Python Deep Dive", "bookAuthor": "John Doe" },
{ "bookTitle": "Data Science Handbook", "bookAuthor": "Alice Johnson" }
]
Analysons l'étape $project :
_id: 0exclut le champ_idpar défaut de la sortie. Par défaut, il est toujours inclus.bookTitle: "$title"crée un nouveau champ nommébookTitleet lui attribue la valeur du champtitled'origine. Le préfixe$indique que vous faites référence à la valeur d'un champ.bookAuthor: "$author"renomme de manière similaire le champauthorenbookAuthor.
Calcul de nouveaux champs
Dans l'étape précédente, vous avez sélectionné et renommé des champs existants. Maintenant, vous allez apprendre à créer des champs entièrement nouveaux en effectuant des calculs sur les données existantes. Pour cela, vous utiliserez l'étape $addFields, qui ajoute de nouveaux champs aux documents sans supprimer les originaux.
Ajoutons un nouveau champ appelé priceWithTax, qui calcule le prix du livre taxes comprises (avec une taxe de 10%).
db.books.aggregate([
{
$addFields: {
priceWithTax: { $multiply: ["$price", 1.1] }
}
}
]);
La sortie inclura tous les champs d'origine plus le nouveau champ priceWithTax pour chaque document :
[
{
_id: ObjectId("..."),
title: 'MongoDB Basics',
author: 'Jane Smith',
price: 29.99,
pages: 250,
categories: [ 'Database', 'Programming' ],
priceWithTax: 32.989
},
{
_id: ObjectId("..."),
title: 'Python Deep Dive',
author: 'John Doe',
price: 39.99,
pages: 450,
categories: [ 'Programming', 'Python' ],
priceWithTax: 43.989
},
{
_id: ObjectId("..."),
title: 'Data Science Handbook',
author: 'Alice Johnson',
price: 49.99,
pages: 600,
categories: [ 'Data Science', 'Programming' ],
priceWithTax: 54.989
}
]
Dans ce pipeline :
$addFieldsest l'étape utilisée pour ajouter de nouveaux champs.priceWithTaxest le nom du nouveau champ que vous créez.$multiplyest un opérateur d'agrégation qui prend un tableau de deux nombres et les multiplie. Ici, il multiplie la valeur du champpricepar1.1.
Mise en forme des données de sortie
Les données sont souvent plus utiles lorsqu'elles sont correctement formatées. Dans cette étape, vous apprendrez à formater les données textuelles (string) et numériques à l'aide de divers opérateurs d'agrégation au sein d'une étape $project. Ceci est utile pour préparer les données à afficher dans des applications ou des rapports.
Créons une sortie plus lisible en convertissant le titre du livre en majuscules et en formatant le prix en tant que chaîne de caractères monétaire.
db.books.aggregate([
{
$project: {
_id: 0,
titleUpperCase: { $toUpper: "$title" },
formattedPrice: {
$concat: [{ $literal: "$" }, { $toString: "$price" }]
}
}
}
]);
La sortie attendue montrera les données transformées :
[
{
"titleUpperCase": "MONGODB BASICS",
"formattedPrice": "$29.99"
},
{
"titleUpperCase": "PYTHON DEEP DIVE",
"formattedPrice": "$39.99"
},
{
"titleUpperCase": "DATA SCIENCE HANDBOOK",
"formattedPrice": "$49.99"
}
]
Examinons les opérateurs utilisés dans cette étape $project :
$toUpper: Cet opérateur convertit une chaîne de caractères en majuscules. Nous l'avons appliqué au champtitle.$concat: Cet opérateur concatène un tableau de chaînes de caractères. Nous l'avons utilisé pour ajouter un signe dollar$en préfixe au prix.$literal: Cet opérateur est utilisé pour représenter des valeurs littérales qui seraient autrement interprétées comme des expressions. Ici, nous utilisons{ $literal: "$" }pour représenter un caractère dollar littéral.$toString: Comme$concatne fonctionne qu'avec des chaînes de caractères, nous avons d'abord dû convertir le champ numériquepriceen une chaîne de caractères à l'aide de l'opérateur$toString.
Filtrage des résultats avec $match
La dernière technique fondamentale que vous apprendrez est le filtrage. L'étape $match vous permet de sélectionner uniquement les documents qui répondent à des critères spécifiques, similaire à la clause WHERE en SQL. C'est l'une des étapes les plus courantes dans un pipeline d'agrégation.
Trouvons tous les livres qui coûtent plus de 35 $.
db.books.aggregate([
{
$match: {
price: { $gt: 35 }
}
}
]);
La sortie ne contiendra que les deux livres qui correspondent au filtre :
[
{
_id: ObjectId("..."),
title: 'Python Deep Dive',
author: 'John Doe',
price: 39.99,
pages: 450,
categories: [ 'Programming', 'Python' ]
},
{
_id: ObjectId("..."),
title: 'Data Science Handbook',
author: 'Alice Johnson',
price: 49.99,
pages: 600,
categories: [ 'Data Science', 'Programming' ]
}
]
L'étape $match utilise la syntaxe de requête MongoDB standard.
price: { $gt: 35 }spécifie la condition de filtrage. Elle sélectionne les documents où le champpriceest supérieur ($gt) à 35.
Vous pouvez également chaîner des étapes pour créer des pipelines plus complexes. Par exemple, vous pouvez d'abord filtrer les documents, puis projeter une sortie personnalisée à partir des résultats.
db.books.aggregate([
{
$match: {
price: { $gt: 35 }
}
},
{
$project: {
_id: 0,
title: 1,
price: 1
}
}
]);
Ce pipeline filtre d'abord les livres coûteux à l'aide de $match, puis, pour ces résultats, utilise $project pour n'afficher que le title et le price. La syntaxe title: 1 dans $project est un moyen abrégé d'inclure un champ.
La sortie finale est à la fois filtrée et projetée :
[
{ "title": "Python Deep Dive", "price": 39.99 },
{ "title": "Data Science Handbook", "price": 49.99 }
]
Pour quitter le shell MongoDB, vous pouvez taper exit ou appuyer sur Ctrl+D.
Résumé
Dans ce laboratoire, vous avez appris les opérations fondamentales du pipeline d'agrégation MongoDB. Vous avez commencé par insérer des données, puis utilisé une série d'étapes pour les transformer. Vous avez pratiqué la sélection et le renommage de champs avec $project, la création de nouveaux champs calculés avec $addFields, la modification de l'apparence des données avec des opérateurs de formatage comme $toUpper et $concat, et le filtrage de documents avec $match. En combinant ces étapes, vous pouvez construire des pipelines de traitement de données sophistiqués pour analyser et remodeler vos données directement dans la base de données, ce qui constitue une approche puissante et efficace de la manipulation des données.

