🛢️Parcours Fioul GroupéCours — MongoDB, les bases (FR)
Accueil › Cours MongoDB — les bases
🍃 Cours de base — en français

MongoDB, les bases

Un cours court et progressif pour démarrer avec MongoDB, dans l'esprit des tutoriels simples : une notion par section, la syntaxe, un exemple et son résultat. Tous les exemples s'exécutent dans mongosh (le shell MongoDB) et utilisent une petite base boutique.

1 Notion

Qu'est-ce que MongoDB ?

MongoDB est une base de données NoSQL orientée documents. Au lieu de tables et de lignes (comme en SQL), on stocke des documents au format proche du JSON, regroupés dans des collections.

Le vocabulaire, comparé au monde SQL :

SQL (relationnel)MongoDB
Base de donnéesBase de données
TableCollection
Ligne (enregistrement)Document
ColonneChamp

Un document ressemble à ceci

{
  "_id": ObjectId("652f..."),   // clé unique, générée automatiquement
  "nom": "Dupont",
  "ville": "Limoges",
  "points": 120
}
À retenir — chaque document possède un champ _id unique. Si tu ne le fournis pas, MongoDB en crée un automatiquement (un ObjectId). Les documents d'une même collection n'ont pas besoin d'avoir exactement les mêmes champs : c'est la souplesse du NoSQL.
2 Notion

Démarrer avec mongosh

mongosh est le shell de MongoDB : une console qui permet de taper des commandes directement. On peut aussi utiliser MongoDB Compass (interface graphique) ou l'extension VS Code, mais le shell est le plus direct pour apprendre.

Se connecter au serveur local

mongosh

Quelques commandes utiles

show dbs           // lister les bases existantes
db                 // afficher la base courante
show collections   // lister les collections de la base courante
Astuce — tu peux tout faire depuis Compass en cliquant, mais taper les commandes dans mongosh aide à comprendre ce qui se passe réellement.
3 Notion

Créer / utiliser une base

La commande use sélectionne une base — et la crée si elle n'existe pas encore. En réalité, la base n'apparaît vraiment qu'au premier document inséré.

Syntaxe

use nomDeLaBase

Exemple

use boutique

Résultat

switched to db boutique
Note — tant qu'aucun document n'y est inséré, show dbs n'affichera pas encore boutique. C'est normal.
4 Notion

Insérer des documents

On ajoute des documents dans une collection avec insertOne() (un document) ou insertMany() (plusieurs). La collection est créée automatiquement au premier insert.

Syntaxe

db.collection.insertOne({ champ: valeur, ... })
db.collection.insertMany([ { ... }, { ... } ])

Exemple — un client

db.clients.insertOne({
  nom: "Dupont",
  ville: "Limoges",
  points: 120
})

Résultat

{ acknowledged: true, insertedId: ObjectId("652f1a...") }

Exemple — plusieurs clients d'un coup

db.clients.insertMany([
  { nom: "Martin", ville: "Limoges", points: 80 },
  { nom: "Nguyen", ville: "Brive",   points: 200 },
  { nom: "Petit",  ville: "Limoges", points: 50 }
])
À retenir — pas besoin de définir un schéma au préalable, contrairement au SQL. On insère directement le document.
5 Notion

Rechercher des documents (find)

find() renvoie tous les documents qui correspondent à un filtre. Sans filtre, elle renvoie tout. findOne() renvoie seulement le premier résultat.

Syntaxe

db.collection.find(filtre)
db.collection.findOne(filtre)

Exemple — tous les clients

db.clients.find()

Exemple — les clients de Limoges

db.clients.find({ ville: "Limoges" })

Résultat

{ _id: ObjectId("..."), nom: "Dupont", ville: "Limoges", points: 120 } { _id: ObjectId("..."), nom: "Martin", ville: "Limoges", points: 80 } { _id: ObjectId("..."), nom: "Petit", ville: "Limoges", points: 50 }
Astuce lisibilité — ajoute .pretty() pour un affichage indenté : db.clients.find().pretty().
6 Notion

Filtrer avec des opérateurs

Un filtre peut aller plus loin que l'égalité, grâce aux opérateurs de comparaison (préfixés par $) et aux opérateurs logiques.

Principaux opérateurs

$gt  // supérieur à        $gte // supérieur ou égal
$lt  // inférieur à        $lte // inférieur ou égal
$ne  // différent de       $in  // dans une liste

Exemple — clients avec plus de 100 points

db.clients.find({ points: { $gt: 100 } })

Exemple — clients de Limoges OU de Brive

db.clients.find({ ville: { $in: ["Limoges", "Brive"] } })

Exemple — combiner deux conditions (ET implicite)

db.clients.find({ ville: "Limoges", points: { $gte: 80 } })

Exemple — un OU explicite

db.clients.find({ $or: [
  { ville: "Brive" },
  { points: { $gt: 150 } }
] })
À retenir — plusieurs champs dans le même objet = un ET. Pour un OU, on utilise $or avec un tableau de conditions.
7 Notion

Choisir les champs (projection)

Le second argument de find() indique quels champs afficher : 1 pour inclure, 0 pour exclure. C'est la projection.

Exemple — n'afficher que le nom et les points

db.clients.find(
  { },                              // pas de filtre : tous
  { nom: 1, points: 1, _id: 0 }   // projection
)

Résultat

{ nom: "Dupont", points: 120 } { nom: "Martin", points: 80 } { nom: "Nguyen", points: 200 } { nom: "Petit", points: 50 }
Note — le champ _id est affiché par défaut ; on l'exclut explicitement avec _id: 0. On ne mélange pas inclusion et exclusion (sauf pour _id).
8 Notion

Trier les résultats (sort)

sort() ordonne les résultats : 1 pour croissant, -1 pour décroissant.

Exemple — clients du plus au moins de points

db.clients.find().sort({ points: -1 })

Résultat

{ nom: "Nguyen", points: 200, ... } { nom: "Dupont", points: 120, ... } { nom: "Martin", points: 80, ... } { nom: "Petit", points: 50, ... }
9 Notion

Limiter les résultats (limit / skip)

limit() restreint le nombre de documents renvoyés ; skip() en saute un certain nombre. On les combine souvent avec sort() — par exemple pour un « top 3 » ou de la pagination.

Exemple — les 2 meilleurs clients

db.clients.find().sort({ points: -1 }).limit(2)

Exemple — pagination (page 2, 2 par page)

db.clients.find().skip(2).limit(2)
Ordre d'écriture — peu importe l'ordre de sort, skip, limit dans la ligne : MongoDB applique toujours tri → skip → limit.
10 Notion

Mettre à jour (update)

updateOne() modifie le premier document correspondant, updateMany() tous. L'opérateur $set modifie ou ajoute un champ, $inc incrémente une valeur.

Syntaxe

db.collection.updateOne(filtre, { $set: { champ: valeur } })

Exemple — changer la ville de Dupont

db.clients.updateOne(
  { nom: "Dupont" },
  { $set: { ville: "Tulle" } }
)

Exemple — ajouter 10 points à tous les clients de Limoges

db.clients.updateMany(
  { ville: "Limoges" },
  { $inc: { points: 10 } }
)

Résultat

{ acknowledged: true, matchedCount: 2, modifiedCount: 2 }
Attention — sans opérateur $set, tu remplaces tout le document par ce que tu passes ! Utilise toujours $set pour ne modifier que certains champs.
11 Notion

Supprimer (delete / drop)

deleteOne() supprime le premier document correspondant, deleteMany() tous. drop() supprime la collection entière.

Exemple — supprimer un client

db.clients.deleteOne({ nom: "Petit" })

Exemple — supprimer tous les clients de Brive

db.clients.deleteMany({ ville: "Brive" })

Exemple — supprimer toute la collection

db.clients.drop()
Irréversible — deleteMany({}) avec un filtre vide supprime tous les documents. À manipuler avec prudence.
12 Notion

Agréger (aggregate)

L'agrégation calcule des résultats à partir de plusieurs documents, via un pipeline d'étapes : $match (filtrer), $group (regrouper), $sort (trier)… C'est l'équivalent puissant du GROUP BY du SQL.

Exemple — total de points par ville

db.clients.aggregate([
  { $group: {
      _id: "$ville",               // on regroupe par ville
      totalPoints: { $sum: "$points" },
      nbClients:   { $sum: 1 }
  }},
  { $sort: { totalPoints: -1 } }
])

Résultat

{ _id: "Limoges", totalPoints: 260, nbClients: 3 } { _id: "Brive", totalPoints: 200, nbClients: 1 }
Le lien avec le projet — c'est exactement ce mécanisme qui, dans Fioul Groupé, calcule le volume total par campagne (avec $sum) pour déterminer le palier de prix. Voir le guide pas à pas, étape 6.
← Retour au portail