Aller au contenu

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" 
      } 
    } 
  }
])