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ées | Base de données |
| Table | Collection |
| Ligne (enregistrement) | Document |
| Colonne | Champ |
Un document ressemble à ceci
{
"_id": ObjectId("652f..."), // clé unique, générée automatiquement
"nom": "Dupont",
"ville": "Limoges",
"points": 120
}
_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.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
mongosh aide à comprendre ce qui se passe réellement.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
show dbs n'affichera pas encore boutique. C'est normal.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
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 }
])
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
.pretty() pour un affichage indenté : db.clients.find().pretty().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 } }
] })
$or avec un tableau de conditions.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
_id est affiché par défaut ; on l'exclut explicitement avec _id: 0. On ne mélange pas inclusion et exclusion (sauf pour _id).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
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)
sort, skip, limit dans la ligne : MongoDB applique toujours tri → skip → limit.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
$set, tu remplaces tout le document par ce que tu passes ! Utilise toujours $set pour ne modifier que certains champs.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()
deleteMany({}) avec un filtre vide supprime tous les documents. À manipuler avec prudence.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
$sum) pour déterminer le palier de prix. Voir le guide pas à pas, étape 6.