Regrouper les documents par un champ
La première étape de l'agrégation de données consiste souvent à regrouper des documents en fonction d'un champ commun. Dans cette étape, vous vous connecterez au shell MongoDB, créerez une nouvelle base de données et une nouvelle collection, puis utiliserez l'opérateur $group pour regrouper les documents par catégorie.
Tout d'abord, ouvrez le shell MongoDB en exécutant la commande suivante dans votre terminal :
mongosh
Une fois dans le shell, vous verrez une invite test>. Passons à une nouvelle base de données appelée salesdb et insérons des données de produits exemples. MongoDB créera automatiquement la base de données et la collection lorsque vous y insérerez des données pour la première fois.
Copiez et collez les commandes suivantes dans le shell mongosh :
use salesdb
db.products.insertMany([
{ category: "Electronics", brand: "Apple", price: 1200 },
{ category: "Electronics", brand: "Samsung", price: 800 },
{ category: "Electronics", brand: "Sony", price: 950 },
{ category: "Apparel", brand: "Nike", price: 150 },
{ category: "Apparel", brand: "Adidas", price: 120 },
{ category: "Books", brand: "Penguin", price: 25 },
{ category: "Books", brand: "Penguin", price: 35 }
]);
Maintenant que vous avez des données, vous pouvez effectuer une agrégation. La commande suivante regroupe les documents par le champ category et calcule le prix total pour chaque catégorie en utilisant l'accumulateur $sum.
db.products.aggregate([
{
$group: {
_id: "$category",
totalPrice: { $sum: "$price" }
}
}
]);
Exemple de sortie :
[
{ "_id": "Books", "totalPrice": 60 },
{ "_id": "Apparel", "totalPrice": 270 },
{ "_id": "Electronics", "totalPrice": 2950 }
]
Décomposons l'étape d'agrégation :
db.products.aggregate([...]) : C'est la méthode utilisée pour effectuer une agrégation. Elle prend un tableau d'étapes, formant un pipeline.
$group : C'est l'opérateur d'étape qui regroupe les documents d'entrée.
_id: "$category" : Cette expression spécifie la clé de regroupement. Ici, nous regroupons par la valeur du champ category. Le préfixe $ indique un chemin de champ.
totalPrice: { $sum: "$price" } : C'est un accumulateur. Il définit un nouveau champ dans le document de sortie appelé totalPrice. L'opérateur $sum calcule la somme du champ price pour tous les documents du groupe.