MongoDB Academy · Leçon

Concepts des chaînes de traitement : étapes, opérateurs et expressions

Les apprenants comprendront comment les données circulent entre les étapes d’une chaîne de traitement et distingueront les opérateurs d’étape des opérateurs d’expression.

Leçon 1 sur 413 étapes

Concepts des chaînes de traitement : étapes, opérateurs et expressions est une leçon MongoDB Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage MongoDB Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours MongoDB Academy comprend 4 leçons au total.

Qu’est-ce que le pipeline d’agrégation ?

Le pipeline d’agrégation est le moteur de transformation des données côté serveur de MongoDB. Au lieu de récupérer des documents bruts et de les traiter dans le code de l’application, vous définissez une suite d’étapes qui transforment progressivement le flux de données : filtrage, remodelage, regroupement, calcul et tri, le tout au sein du moteur de base de données. Cela maintient les calculs lourds à proximité des données et réduit considérablement la quantité de données envoyées sur le réseau.

// A simple aggregation pipeline
db.orders.aggregate([
  { $match: { status: 'completed' } },   // stage 1: filter
  { $group: { _id: '$userId', total: { $sum: '$amount' } } },  // stage 2: group
  { $sort: { total: -1 } },             // stage 3: sort
  { $limit: 10 }                        // stage 4: take top 10
]);

Comment les documents circulent entre les étapes

Imaginez le pipeline comme un tapis roulant : chaque document entre dans l’étape 1, y est transformé ou filtré, puis les résultats passent à l’étape 2, ensuite à l’étape 3, et ainsi de suite. À chaque étape, l’ensemble des documents peut diminuer (filtrage), augmenter (décomposition) ou être entièrement remplacé par des résumés calculés (regroupement). Les documents qui ne respectent pas une condition de filtrage sont retirés du pipeline et n’atteignent jamais les étapes suivantes.

// Data flow visualization:
// Input: 10,000 orders
// Stage 1 ($match: status='completed'):  8,000 docs
// Stage 2 ($group by userId):            1,200 docs (one per user)
// Stage 3 ($sort by total DESC):         1,200 docs (reordered)
// Stage 4 ($limit 10):                      10 docs
// Output to client: 10 docs

Opérateurs d’étape et opérateurs d’expression

Le cadre d’agrégation distingue deux types d’opérateurs : les opérateurs d’étape (préfixés par $), qui définissent le rôle d’une étape du pipeline, comme $match, $group et $project, et les opérateurs d’expression (également préfixés par $), qui calculent des valeurs au sein d’une étape, comme $sum, $avg et $concat. Les étapes sont les blocs de construction ; les expressions sont les calculs qu’elles contiennent.

db.sales.aggregate([
  // $group is a STAGE operator
  { $group: {
    _id: '$region',
    // $sum and $avg are EXPRESSION operators (accumulators here)
    totalRevenue: { $sum: '$amount' },
    avgOrder: { $avg: '$amount' },
    // $concat is an expression operator
    label: { $concat: ['Region: ', '$region'] }
  }}
]);

Références de champs avec le signe $

Dans les expressions d’agrégation, une chaîne précédée de $ est une référence de champ : elle désigne la valeur de ce champ dans le document actuel. Sans ce préfixe, la chaîne est traitée comme une valeur littérale. Cette distinction est essentielle : '$price' signifie « la valeur du champ price », tandis que 'price' signifie la chaîne littérale « price ».

db.products.aggregate([
  { $project: {
    name: 1,
    // '$price' references the 'price' field value
    discountedPrice: { $multiply: ['$price', 0.9] },
    // 'price' without $ is a literal string
    label: 'price',  // all docs get the string 'price', not the field value
    // $$ROOT is a special variable for the whole document
    original: '$$ROOT'
  }}
]);

Variables système : $$ROOT, $$NOW, $$CURRENT

Le pipeline d’agrégation fournit des variables système préfixées par $$, qui donnent accès à des valeurs spéciales : $$ROOT désigne l’intégralité du document actuel, $$NOW correspond à la date et à l’heure actuelles (ce qui est utile dans $project pour les champs calculés), $$CURRENT représente le contexte de chemin du champ du document actuel, et $$REMOVE supprime conditionnellement un champ lorsqu’il est affecté comme valeur.

db.orders.aggregate([
  { $project: {
    _id: 1,
    orderDate: 1,
    daysOld: {
      $divide: [
        { $subtract: ['$$NOW', '$orderDate'] },  // $$NOW = current time
        1000 * 60 * 60 * 24  // convert ms to days
      ]
    },
    // Conditionally remove a field:
    sensitiveField: { $cond: { if: '$isAdmin', then: '$secret', else: '$$REMOVE' } }
  }}
]);

Présentation des étapes courantes du pipeline

MongoDB fournit des dizaines d’étapes de pipeline. Les principales à connaître sont : $match (filtrer les documents), $project (remodeler ou calculer les champs), $group (agréger par clé), $sort (ordonner les résultats), $limit et $skip (gérer la pagination), $lookup (effectuer une jointure avec une autre collection) et $unwind (aplatir les tableaux). Maîtrisez-les et vous pourrez exprimer presque toute requête analytique.

// Quick reference of the most-used stages:
// $match   - { $match: { field: condition } }
// $project - { $project: { keep: 1, drop: 0, computed: expr } }
// $group   - { $group: { _id: '$field', agg: { $sum: '$val' } } }
// $sort    - { $sort: { field: 1 or -1 } }
// $limit   - { $limit: N }
// $skip    - { $skip: N }
// $lookup  - { $lookup: { from, localField, foreignField, as } }
// $unwind  - { $unwind: '$arrayField' }

Optimisation du pipeline : l’ordre des étapes est important

L’optimiseur de requêtes de MongoDB réordonne automatiquement certaines étapes du pipeline pour améliorer l’efficacité, par exemple en plaçant $match avant $sort et $group lorsque cela est possible. Toutefois, vous devez toujours placer vous-même $match aussi tôt que possible : un filtrage précoce réduit le nombre de documents que les étapes suivantes doivent traiter et, si $match est la première étape, MongoDB peut utiliser un index pour cette opération.

// BAD: expensive group before filter
db.orders.aggregate([
  { $group: { _id: '$userId', total: { $sum: '$amount' } } },
  { $match: { total: { $gt: 1000 } } }  // too late to use index
]);

// GOOD: filter first, then group
db.orders.aggregate([
  { $match: { status: 'completed', createdAt: { $gte: thisYear } } },
  { $group: { _id: '$userId', total: { $sum: '$amount' } } },
  { $match: { total: { $gt: 1000 } } }
]);

Opérateurs d’expression arithmétique

Les expressions arithmétiques permettent de calculer de nouvelles valeurs à partir de champs existants au sein d’une étape. Les plus courantes sont : $add, $subtract, $multiply, $divide, $mod et $abs. Ces opérateurs fonctionnent avec des références de champs, des valeurs littérales ou le résultat d’autres expressions, ce qui permet d’effectuer des calculs complexes qui nécessitaient auparavant un traitement du côté de l’application.

db.invoices.aggregate([
  { $project: {
    subtotal: '$subtotal',
    taxAmount: { $multiply: ['$subtotal', 0.08] },  // 8% tax
    total: { $add: ['$subtotal', { $multiply: ['$subtotal', 0.08] }] },
    discount: { $subtract: ['$listPrice', '$salePrice'] },
    margin: { $divide: [{ $subtract: ['$price', '$cost'] }, '$price'] }
  }}
]);

Expressions conditionnelles : $cond et $ifNull

Les expressions conditionnelles permettent d’utiliser une logique si/sinon dans les étapes d’agrégation. $cond évalue une expression booléenne et renvoie l’une de deux valeurs, comme un opérateur ternaire. $ifNull renvoie une valeur de remplacement lorsqu’un champ est nul ou absent. Ces opérateurs sont essentiels pour gérer les champs facultatifs et calculer des catégories dérivées sans modifier les données enregistrées.

db.products.aggregate([
  { $project: {
    name: 1,
    price: 1,
    // Ternary: label products as budget or premium
    tier: {
      $cond: {
        if: { $lt: ['$price', 100] },
        then: 'budget',
        else: 'premium'
      }
    },
    // Fallback for missing description
    description: { $ifNull: ['$description', 'No description available'] }
  }}
]);

Opérateurs d’expression sur les chaînes

Les opérateurs sur les chaînes permettent de manipuler les champs textuels dans le pipeline : $concat assemble des chaînes, $toUpper/$toLower modifient la casse, $trim/$ltrim/$rtrim suppriment les espaces superflus, $substr extrait une sous-chaîne et $split divise selon un séparateur. Ils sont utiles pour normaliser les données pendant l’agrégation sans avoir à mettre à jour les documents enregistrés.

db.users.aggregate([
  { $project: {
    // Combine first and last name
    fullName: { $concat: ['$firstName', ' ', '$lastName'] },
    // Normalise email to lowercase
    emailNorm: { $toLower: '$email' },
    // Extract domain from email
    domain: {
      $arrayElemAt: [{ $split: ['$email', '@'] }, 1]
    }
  }}
]);

Opérateurs d’expression sur les dates

Les opérateurs de date extraient des composants des champs de date pour les regroupements et les calculs : $year, $month, $dayOfMonth, $hour, $minute, $dayOfWeek et $dateToString. Ils sont indispensables pour les analyses de séries temporelles, comme le « nombre total de commandes par mois » ou le « revenu moyen par jour de la semaine ».

// Group orders by year and month
db.orders.aggregate([
  { $group: {
    _id: {
      year: { $year: '$createdAt' },
      month: { $month: '$createdAt' }
    },
    count: { $sum: 1 },
    revenue: { $sum: '$amount' }
  }},
  { $sort: { '_id.year': 1, '_id.month': 1 } }
]);

Vérification rapide

Vérifiez votre compréhension des concepts du pipeline d’agrégation présentés dans cette leçon.

Récapitulatif de la leçon

Dans cette leçon, vous avez appris que les étapes du pipeline transforment séquentiellement un flux de documents, que les opérateurs d’étape définissent le rôle d’une étape tandis que les opérateurs d’expression calculent des valeurs au sein des étapes, et que $ préfixe les références de champs tandis que $$ préfixe les variables système. Nous allons maintenant nous concentrer sur $match et $project, les outils essentiels du filtrage et du remodelage.

Gratuit pour commencer

Apprends JavaScript avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
30
Leçons
120

Questions Fréquemment Posées

La leçon « Concepts des chaînes de traitement : étapes, opérateurs et expressions » est-elle gratuite ?

Oui — le texte complet de « Concepts des chaînes de traitement : étapes, opérateurs et expressions » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours MongoDB Academy, passe à CoddyKit PRO. Le cours MongoDB Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Concepts des chaînes de traitement : étapes, opérateurs et expressions » ?

Les apprenants comprendront comment les données circulent entre les étapes d’une chaîne de traitement et distingueront les opérateurs d’étape des opérateurs d’expression. Tu pratiques MongoDB Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer MongoDB Academy ?

Aucune expérience préalable n'est requise. MongoDB Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Concepts des chaînes de traitement : étapes, opérateurs et expressions » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon MongoDB Academy ?

Oui. Chaque leçon MongoDB Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Concepts des chaînes de traitement : étapes, opérateurs et expressions
  2. $match et $project : filtrer et remodeler
  3. $group : agréger et calculer des totaux
  4. $sort, $limit et $skip dans la chaîne de traitement
← Retour à MongoDB Academy