Agrégation à finalité unique
Introduction à l'agrégation à finalité unique
- L'agrégation à finalité unique permet d'effectuer des opérations d'agrégation simples directement sur un champ spécifique d'une collection.
- Les méthodes d'agrégation à finalité unique sont généralement plus rapides et plus simples que les pipelines d'agrégation et Map-reduce pour des opérations simples.
Utilisation de méthodes d'agrégation simples : count, sum, avg, min, max
$count
: Compter le nombre de documents dans une collection ou correspondant à un filtre.
- Exemple :
db.collection.count()
$sum
: Calculer la somme des valeurs d'un champ spécifique pour tous les documents correspondant à un filtre.
- Exemple :
db.collection.aggregate([{ $group: { _id: null, total: { $sum: "$champ" }}}])
$avg
: Calculer la moyenne des valeurs d'un champ spécifique pour tous les documents correspondant à un filtre.
- Exemple :
db.collection.aggregate([{ $group: { _id: null, moyenne: { $avg: "$champ" }}}])
$min
: Trouver la valeur minimale d'un champ spécifique parmi les documents correspondant à un filtre.
- Exemple :
db.collection.aggregate([{ $group: { _id: null, minimum: { $min: "$champ" }}}])
$max
: Trouver la valeur maximale d'un champ spécifique parmi les documents correspondant à un filtre.
- Exemple :
db.collection.aggregate([{ $group: { _id: null, maximum: { $max: "$champ" }}}])
Agrégation avec des opérateurs de groupe
$group
- regrouper des documents en fonction d'un ou plusieurs champs
$sum
- additionner les valeurs d'un champ spécifié
- Exemple:
{ $sum: "$field" }
$avg
- calculer la moyenne des valeurs d'un champ spécifié
- Exemple:
{ $avg: "$field" }
$min
- déterminer la valeur minimale d'un champ spécifié
- Exemple:
{ $min: "$field" }
$max
- déterminer la valeur maximale d'un champ spécifié
- Exemple:
{ $max: "$field" }
$push
- ajouter les valeurs d'un champ spécifié à un tableau
- Exemple:
{ $push: "$field" }
$addToSet
- ajouter les valeurs d'un champ spécifié à un tableau de valeurs uniques
- Exemple:
{ $addToSet: "$field" }
Agrégation conditionnelle
$cond
- appliquer une condition ternaire (si... alors... sinon...) sur les documents
- Exemple:
{ $cond: { if: { $gte: ["$field", 0] }, then: "$field", else: "N/A" } }
$ifNull
- remplacer les valeurs nulles ou inexistantes par une valeur par défaut
- Exemple:
{ $ifNull: ["$field", "N/A"] }
Exemples d'agrégation à finalité unique
Exemple 1: Calculer le montant total des ventes par catégorie
db.collection.aggregate([
{
$group: {
_id: "$category", totalSales: { $sum: "$sales" }
}
}
])
Exemple 2: Obtenir la moyenne des notes par étudiant
db.collection.aggregate([
{
$group: {
_id: "$student",
avgGrade: { $avg: "$grade" } }
}
])
Exemple 3: Trouver le prix minimum et maximum par produit
db.collection.aggregate([
{
$group: {
_id: "$product",
minPrice: {
$min: "$price"
},
maxPrice: {
$max: "$price"
}
}
}
])