Les agrégations dans MongoDB permettent de réaliser des opérations de traitement de données, telles que le filtrage, le regroupement, le tri et les transformations, directement sur les collections de documents.
$match$group$sort$projectLe pipeline d'agrégation est une séquence d'étapes de traitement de données. Chaque étape prend des documents en entrée, les transforme et produit des résultats en sortie.
Exemple, voici une collection sales avec des documents :
db.sales.insertMany([
{ "item": "apple", "price": 1, "quantity": 10, "date": new Date("2023-01-01") },
{ "item": "banana", "price": 2, "quantity": 5, "date": new Date("2023-01-02") },
{ "item": "orange", "price": 1.5, "quantity": 8, "date": new Date("2023-01-03") },
{ "item": "apple", "price": 1, "quantity": 40, "date": new Date("2023-01-05") }
])
Voici une aggregation avec son pipeline :
db.sales.aggregate([
{ $match: { item: 'apple' } },
{ $group: { _id: '$item', totalSales: { $sum: { $multiply: ['$price', '$quantity'] } } } },
{ $sort: { totalSales: -1 } },
{ $project: { item: 1, totalSales: 1, _id: 0 } }
])
$matchL'opérateur $match est utilisé pour filtrer les documents selon des critères spécifiques, similaire à l'opérateur find.
{ "$match": { "item": "apple" } }
$groupL'opérateur $group regroupe les documents par une clé spécifiée et permet d'appliquer des opérations d'agrégation comme $sum, $avg, $max, et $min.
{
"$group": {
"_id": "$item",
"totalSales": {
"$sum": {
"$multiply": ["$price", "$quantity"]
}
}
}
}
item.
_id est utilisée pour spécifier le champ par lequel les documents seront regroupés. Dans ce cas, les documents sont regroupés par la valeur du champ item.$sum additionne les valeurs d'un champ pour chaque groupe de documents.$multiply multiplie les valeurs des champs price et quantity pour chaque document. Le résultat est ensuite additionné par $sum pour chaque groupe.