Regrouper des données MongoDB

MongoDBMongoDBBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre à effectuer des opérations d'agrégation de base dans MongoDB, y compris le regroupement de données par un seul champ, le calcul des totaux de groupe, le comptage des éléments de groupe, le filtrage des groupes et le tri des résultats de groupe. Ces compétences sont essentielles pour l'analyse de données et la compréhension des données de votre base de données MongoDB.

Le laboratoire couvre une gamme de techniques d'agrégation, en commençant par le regroupement de données par un seul champ puis en s'étendant à des opérations plus complexes telles que le calcul de moyennes, de comptages et le filtrage des groupes. À la fin du laboratoire, vous aurez une compréhension solide de la manière d'utiliser le cadre d'agrégation de MongoDB pour débloquer le pouvoir de vos données.

Group By Single Field

Dans cette étape, vous allez apprendre à regrouper des données par un seul champ à l'aide du cadre d'agrégation de MongoDB. Le regroupement vous permet d'organiser et de résumer des données sur la base d'un champ spécifique, ce qui est crucial pour l'analyse de données.

Commençons tout d'abord par lancer le shell MongoDB :

mongosh

Maintenant, créons une collection d'échantillons de produits pour démontrer le regroupement :

use salesdb

db.products.insertMany([
    { category: "Electronics", price: 500 },
    { category: "Clothing", price: 50 },
    { category: "Electronics", price: 300 },
    { category: "Books", price: 25 },
    { category: "Clothing", price: 75 },
    { category: "Books", price: 40 }
])

Ensuite, nous utiliserons l'opérateur d'agrégation $group pour regrouper les produits par catégorie et calculer le prix total pour chaque catégorie :

db.products.aggregate([
  {
    $group: {
      _id: "$category",
      totalPrice: { $sum: "$price" }
    }
  }
]);
Exemple de sortie
[
  { _id: 'Electronics', totalPrice: 800 },
  { _id: 'Clothing', totalPrice: 125 },
  { _id: 'Books', totalPrice: 65 }
]

Analysons le pipeline d'agrégation :

  • $group : Regroupe les documents selon une expression spécifiée
  • _id: "$category" : Spécifie que nous regroupons par le champ catégorie
  • totalPrice: { $sum: "$price" } : Calcule le prix total pour chaque catégorie

Calculate Group Totals

Dans cette étape, nous allons approfondir nos compétences de regroupement précédentes en apprenant à calculer différents totaux d'agrégation à l'aide du cadre d'agrégation de MongoDB. Nous utiliserons plusieurs opérateurs d'agrégation pour extraire des informations plus complexes à partir de nos données de produits.

Continuons à travailler avec la base de données salesdb et la collection products que nous avons créées dans l'étape précédente :

// Ensure we're in the correct database
use salesdb

Nous allons explorer différents opérateurs d'agrégation pour calculer les totaux de groupe :

  1. Calculer le prix moyen par catégorie :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      averagePrice: { $avg: "$price" }
    }
  }
]);
  1. Trouver le prix maximum et minimum dans chaque catégorie :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      maxPrice: { $max: "$price" },
      minPrice: { $min: "$price" }
    }
  }
]);
  1. Combiner plusieurs calculs dans une seule agrégation :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      totalPrice: { $sum: "$price" },
      averagePrice: { $avg: "$price" },
      productCount: { $sum: 1 }
    }
  }
]);
Exemple de sortie
[
  {
    _id: 'Electronics',
    totalPrice: 800,
    averagePrice: 400,
    productCount: 2
  },
  {
    _id: 'Clothing',
    totalPrice: 125,
    averagePrice: 62.5,
    productCount: 2
  },
  {
    _id: 'Books',
    totalPrice: 65,
    averagePrice: 32.5,
    productCount: 2
  }
]

Opérateurs d'agrégation clés expliqués :

  • $avg : Calcule la moyenne des valeurs numériques
  • $max : Trouve la valeur maximale
  • $min : Trouve la valeur minimale
  • $sum: 1 : Compte le nombre de documents dans chaque groupe

Count Group Items

Dans cette étape, nous allons explorer différentes façons de compter les éléments à l'intérieur de groupes à l'aide du cadre d'agrégation de MongoDB. Le comptage est une opération fondamentale qui vous aide à comprendre la distribution de vos données.

Continuons à travailler avec notre base de données salesdb :

// Ensure we're in the correct database
use salesdb

Tout d'abord, ajoutons plus de produits pour rendre notre comptage plus intéressant :

db.products.insertMany([
  { category: "Electronics", brand: "Apple" },
  { category: "Electronics", brand: "Samsung" },
  { category: "Clothing", brand: "Nike" },
  { category: "Clothing", brand: "Adidas" },
  { category: "Books", brand: "Penguin" },
  { category: "Books", brand: "Oxford" }
]);

Maintenant, comptons les éléments de différentes manières :

  1. Comptez le nombre de produits dans chaque catégorie :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      productCount: { $sum: 1 }
    }
  }
]);
  1. Comptez les marques uniques dans chaque catégorie :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      uniqueBrands: { $addToSet: "$brand" }
    }
  }
]);
  1. Comptez le nombre de marques uniques et le nombre total de produits :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      totalProducts: { $sum: 1 },
      uniqueBrands: { $addToSet: "$brand" },
      brandCount: { $addToSet: "$brand" }
    }
  },
  {
    $project: {
      totalProducts: 1,
      uniqueBrandCount: { $size: "$uniqueBrands" }
    }
  }
]);
Exemple de sortie
[
  {
    _id: 'Electronics',
    totalProducts: 4,
    uniqueBrandCount: 2
  },
  {
    _id: 'Clothing',
    totalProducts: 4,
    uniqueBrandCount: 2
  },
  {
    _id: 'Books',
    totalProducts: 4,
    uniqueBrandCount: 2
  }
]

Opérateurs d'agrégation clés expliqués :

  • $sum: 1 : Compte le nombre total de documents dans chaque groupe
  • $addToSet : Crée un tableau de valeurs uniques
  • $size : Compte le nombre d'éléments dans un tableau

Filter Groups

Dans cette étape, nous allons apprendre à filtrer des groupes à l'aide du cadre d'agrégation de MongoDB. Le filtrage vous permet de vous concentrer sur des sous-ensembles spécifiques de vos données regroupées, fournissant des informations plus ciblées.

Continuons à travailler avec notre base de données salesdb :

// Ensure we're in the correct database
use salesdb

Ajoutons des informations de prix à nos produits existants pour rendre le filtrage plus significatif :

db.products.updateMany(
  { category: "Electronics", brand: "Apple" },
  { $set: { price: 1000 } }
);

db.products.updateMany(
  { category: "Electronics", brand: "Samsung" },
  { $set: { price: 800 } }
);

db.products.updateMany(
  { category: "Clothing", brand: "Nike" },
  { $set: { price: 100 } }
);

db.products.updateMany(
  { category: "Clothing", brand: "Adidas" },
  { $set: { price: 80 } }
);

Maintenant, explorons différentes techniques de filtrage :

  1. Filtrer les groupes avec plus d'un produit :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      products: { $push: "$brand" },
      productCount: { $sum: 1 }
    }
  },
  {
    $match: {
      productCount: { $gt: 1 }
    }
  }
]);
  1. Filtrer les groupes dont le prix total est supérieur à un certain seuil :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      totalPrice: { $sum: "$price" },
      products: { $push: "$brand" }
    }
  },
  {
    $match: {
      totalPrice: { $gt: 500 }
    }
  }
]);
  1. Filtrage complexe avec plusieurs conditions :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      totalPrice: { $sum: "$price" },
      avgPrice: { $avg: "$price" },
      brands: { $addToSet: "$brand" }
    }
  },
  {
    $match: {
      totalPrice: { $gt: 500 },
      avgPrice: { $lt: 900 }
    }
  }
]);
Exemple de sortie
[
  {
    _id: 'Electronics',
    totalPrice: 1800,
    avgPrice: 900,
    brands: [ 'Apple', 'Samsung' ]
  }
]

Opérateurs d'agrégation clés expliqués :

  • $match : Filtre les documents selon des conditions spécifiées
  • $gt : Plus grand que
  • $lt : Moins grand que
  • $push : Ajoute des éléments à un tableau
  • $addToSet : Ajoute des éléments uniques à un tableau

Sort Group Results

Dans cette étape finale, nous allons apprendre à trier les résultats regroupés à l'aide du cadre d'agrégation de MongoDB. Le tri vous aide à organiser et à prioriser vos données agrégées, ce qui facilite l'analyse et la compréhension.

Continuons à travailler avec notre base de données salesdb :

// Ensure we're in the correct database
use salesdb

Nous utiliserons les produits que nous avons déjà créés pour démontrer les techniques de tri :

  1. Trier les groupes par prix total dans l'ordre décroissant :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      totalPrice: { $sum: "$price" },
      productCount: { $sum: 1 }
    }
  },
  {
    $sort: {
      totalPrice: -1
    }
  }
]);
  1. Trier les groupes par nombre de produits et prix total :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      totalPrice: { $sum: "$price" },
      productCount: { $sum: 1 }
    }
  },
  {
    $sort: {
      productCount: -1,
      totalPrice: 1
    }
  }
]);
  1. Tri avancé avec plusieurs étapes d'agrégation :
db.products.aggregate([
  {
    $group: {
      _id: "$category",
      totalPrice: { $sum: "$price" },
      avgPrice: { $avg: "$price" },
      brands: { $addToSet: "$brand" }
    }
  },
  {
    $project: {
      category: "$_id",
      totalPrice: 1,
      avgPrice: 1,
      brandCount: { $size: "$brands" }
    }
  },
  {
    $sort: {
      brandCount: -1,
      totalPrice: -1
    }
  }
]);
Exemple de sortie
[
  {
    category: 'Electronics',
    totalPrice: 1800,
    avgPrice: 900,
    brandCount: 2
  },
  {
    category: 'Clothing',
    totalPrice: 180,
    avgPrice: 90,
    brandCount: 2
  },
  {
    category: 'Books',
    totalPrice: 0,
    avgPrice: 0,
    brandCount: 2
  }
]

Opérateurs d'agrégation clés expliqués :

  • $sort : Trie les documents
    • 1 : Ordre croissant
    • -1 : Ordre décroissant
  • $project : Reforme les documents, vous permettant d'inclure, d'exclure ou de transformer des champs
  • $size : Compte le nombre d'éléments dans un tableau

Summary

Dans ce laboratoire, vous allez apprendre à regrouper des données MongoDB à l'aide du cadre d'agrégation. Tout d'abord, vous allez regrouper les données par un seul champ, tel que la catégorie de produit, et calculer le prix total pour chaque groupe. Vous explorerez ensuite des opérateurs d'agrégation plus avancés pour calculer les totaux de groupe, y compris le prix moyen, le comptage des éléments, et le filtrage et le tri des résultats regroupés. Ces techniques sont essentielles pour l'analyse de données et la prise de connaissance de vos données MongoDB.