6. MongoDB / NoSQL

MongoDB est une base de données NoSQL orientée documents. Elle stocke les données sous forme de documents JSON/BSON flexibles, sans schéma fixe. Idéale pour les applications nécessitant scalabilité horizontale et flexibilité du modèle.

Définition MongoDB utilise des collections (équivalent tables) contenant des documents (équivalent lignes) au format JSON. Chaque document peut avoir une structure différente, contrairement au modèle relationnel.

6.1 Concepts Fondamentaux

Base de Donnees

Conteneur de collections (equivalent a une BDD relationnelle)

Collection

Groupe de documents (equivalent a une table)

Document

Enregistrement JSON/BSON (equivalent a une ligne)

Champ

Paire cle-valeur (equivalent a une colonne)

6.2 Operations CRUD

Create (Insertion)

// Inserer un document
db.etudiants.insertOne({
  nom: "Dupont",
  prenom: "Jean",
  age: 22,
  cours: ["SGBD", "Java", "Web"]
})

// Inserer plusieurs documents
db.etudiants.insertMany([
  { nom: "Martin", prenom: "Claire", age: 21 },
  { nom: "Bernard", prenom: "Pierre", age: 23 }
])

Read (Lecture)

// Tous les documents
db.etudiants.find()

// Avec filtre
db.etudiants.find({ age: { $gt: 21 } })

// Un seul document
db.etudiants.findOne({ nom: "Dupont" })

// Projection (selection de champs)
db.etudiants.find({}, { nom: 1, prenom: 1, _id: 0 })

Update (Modification)

// Modifier un document
db.etudiants.updateOne(
  { nom: "Dupont" },
  { $set: { age: 23 } }
)

// Modifier plusieurs documents
db.etudiants.updateMany(
  { age: { $lt: 22 } },
  { $inc: { age: 1 } }
)

Delete (Suppression)

// Supprimer un document
db.etudiants.deleteOne({ nom: "Martin" })

// Supprimer plusieurs documents
db.etudiants.deleteMany({ age: { $lt: 20 } })

6.3 Operateurs de Filtrage

OperateurDescriptionExemple
$eqEgal a{ age: { $eq: 25 } }
$neDifferent de{ status: { $ne: "inactif" } }
$gtPlus grand que{ age: { $gt: 18 } }
$gtePlus grand ou egal{ note: { $gte: 10 } }
$ltPlus petit que{ prix: { $lt: 100 } }
$ltePlus petit ou egal{ stock: { $lte: 5 } }
$inDans une liste{ status: { $in: ["A", "B"] } }
$ninPas dans une liste{ type: { $nin: ["X", "Y"] } }

6.4 Operateurs Logiques

// AND implicite
db.col.find({ age: { $gt: 18 }, status: "actif" })

// AND explicite
db.col.find({ $and: [{ age: { $gt: 18 } }, { status: "actif" }] })

// OR
db.col.find({ $or: [{ age: { $lt: 18 } }, { status: "senior" }] })

// NOT
db.col.find({ age: { $not: { $gt: 25 } } })

6.5 Pipeline d'Agregation

db.ventes.aggregate([
  // Etape 1: Filtrer
  { $match: { annee: 2025 } },
  
  // Etape 2: Grouper
  { $group: {
      _id: "$categorie",
      total: { $sum: "$montant" },
      moyenne: { $avg: "$montant" },
      count: { $sum: 1 }
  }},
  
  // Etape 3: Trier
  { $sort: { total: -1 } },
  
  // Etape 4: Limiter
  { $limit: 5 },
  
  // Etape 5: Projeter
  { $project: {
      categorie: "$_id",
      total: 1,
      _id: 0
  }}
])

6.6 Operateurs d'Agregation

EtapeDescription
$matchFiltre les documents
$groupGroupe par champ
$projectSelectionne/transforme les champs
$sortTrie les resultats
$limitLimite le nombre de resultats
$skipSaute N documents
$unwindDecompresse un tableau
$lookupJointure avec autre collection

Fonctions d'Agregation dans $group

FonctionDescription
$sumSomme
$avgMoyenne
$minValeur minimum
$maxValeur maximum
$pushAjoute a un tableau
$firstPremiere valeur
$lastDerniere valeur
Points Examen MongoDB

Quiz - Module 6 : MongoDB

Testez vos connaissances sur MongoDB.

Q1. Quel opérateur signifie "plus grand que" ?

Q2. Quelle méthode insère plusieurs documents ?

Q3. Quelle étape filtre les documents dans un pipeline d'agrégation ?

Q4. Comment trier par ordre décroissant ?

Q5. Quel opérateur incrémente une valeur dans updateOne ?

Q6. Dans une projection, comment exclure le champ _id ?