Aller au contenu
Réussir mon BTS SIO

Tape une notion, une commande ou le nom d'une épreuve.

Par exemple

15 chapitres4 h 44 minIntermédiaire

MongoDB et API Node.js

Cours MongoDB gratuit pour le BTS SIO SLAM : NoSQL, requêtes, modélisation, index, agrégation, Mongoose, API Node.js, sécurité, exercices corrigés.

Par Josselyn C., prof de BTS SIO. Mis à jour le .

L'essentiel

MongoDB est la base de données NoSQL la plus connue : au lieu de tables et de lignes, elle range des documents proches du JSON, qui peuvent contenir des sous-documents et des tableaux. Une fiche de frais et toutes ses lignes tiennent ainsi dans un seul document, lu et écrit en une opération. C'est la base qu'on associe le plus souvent à Node.js (la pile « MERN » : MongoDB, Express, React, Node.js), et un choix fréquent pour les réalisations professionnelles de l'option SLAM qui associent une API Express et un front React. Ce cours t'apprend à l'utiliser sérieusement : interroger, modéliser, indexer, agréger, la brancher sur une API, la sécuriser et la sauvegarder.

Avant ce cours. Tu dois savoir écrire une petite API avec Node.js et Express (routes, contrôleurs, middlewares, authentification par jeton) : c'est l'objet du cours Node.js et Express. Les notions d'API (ressources, méthodes, codes de statut) viennent du cours API REST, et le cours SQL sert de point de comparaison tout au long du cours : chaque notion MongoDB est mise en face de son équivalent SQL.

À la fin de ce cours, tu sauras :

  • expliquer ce qu'est une base NoSQL, distinguer ses familles et justifier le choix de MongoDB ou d'une base relationnelle ;
  • installer MongoDB avec Docker ou Atlas, et le manipuler avec mongosh et Compass ;
  • écrire des requêtes de lecture et de modification, avec les opérateurs de comparaison, de tableau et de mise à jour ;
  • modéliser des données en choisissant entre imbriquer et référencer, et faire valider le schéma ;
  • accélérer les requêtes avec des index, et le prouver avec explain() ;
  • calculer des statistiques avec le pipeline d'agrégation : $match, $group, $unwind, $lookup ;
  • programmer avec le driver officiel et Mongoose : schémas, validation, hooks, populate, transactions ;
  • brancher sur MongoDB l'API Express du cours Node.js, en gardant ses middlewares : contrôleurs CRUD, contrôles d'accès dans les filtres, erreurs de MongoDB traduites en codes HTTP ;
  • sécuriser la base et l'API contre l'exposition réseau, les droits excessifs, l'injection NoSQL et l'affectation de masse ;
  • sauvegarder et restaurer une base avec mongodump et mongorestore.

Les versions. Le cours utilise MongoDB 9.0 (sortie fin septembre 2026 ; tout fonctionne aussi avec la 8.0, que propose l'offre gratuite d'Atlas), Node.js 24 (version LTS), le driver mongodb 7, Mongoose 9, Express 5 et Zod 4. Toutes les requêtes et tous les programmes du cours ont été exécutés sur ces versions ; les résultats affichés sont ceux qu'ils produisent. Méfie-toi des tutoriels plus anciens : beaucoup utilisent des fonctions disparues (next() dans les hooks de Mongoose, count(), { new: true }) ou des paquets qui ne fonctionnent plus avec Express 5.

Le fil rouge. Tous les exemples portent sur AppliFrais, l'application de gestion des frais des visiteurs médicaux du laboratoire GSB, le même contexte que le cours API REST : un visiteur saisit chaque mois une fiche de frais, avec des frais forfaitisés (étapes, kilomètres, nuitées, repas) et des frais hors forfait ; il la clôture ; un comptable la valide, puis la met en paiement. Le chapitre 3 fournit le jeu de données à charger.

Comment travailler. Lance une base (Docker ou Atlas), charge le jeu de données et tape chaque requête toi-même dans mongosh : MongoDB s'apprend en essayant. Chaque chapitre se termine par des exercices dont la réponse est masquée : cherche d'abord, ouvre ensuite. Le chapitre 15 rassemble des cas de synthèse et un aide-mémoire des commandes.

Ton objectifChapitres à travailler en priorité
Comprendre le NoSQL et choisir une base1, 2 et 6
Écrire des requêtes MongoDB3, 4, 5 et 8
Construire l'API de ta réalisation pour l'E66, 7, 10, 12 et 15
Justifier ton modèle devant la commission1, 6 et 7
Sécuriser et sauvegarder (E6, E7, E5)11, 13 et 14

Sommaire

0%

MongoDB

0 chapitre sur 15

  1. Chapitre 1 : NoSQL c'est quoi ? Les familles de bases et MongoDB14 min
  2. Chapitre 2 : Document, collection, BSON et ObjectId13 min
  3. Chapitre 3 : Installer MongoDB : Docker, Atlas, mongosh et Compass19 min
  4. Chapitre 4 : Requêtes CRUD dans mongosh : insert, find, update, delete21 min
  5. Chapitre 5 : Opérateurs de requête MongoDB : $gt, $in, $or, $elemMatch, $regex16 min
  6. Chapitre 6 : Modélisation MongoDB : imbriquer ou référencer ?18 min
  7. Chapitre 7 : Index MongoDB et explain() : accélérer les requêtes15 min
  8. Chapitre 8 : Agrégation MongoDB : pipeline, $match, $group, $lookup26 min
  9. Chapitre 9 : Node.js et MongoDB : le driver officiel15 min
  10. Chapitre 10 : Mongoose : schéma, validation, middleware et populate21 min
  11. Chapitre 11 : Transactions MongoDB : quand et comment les utiliser15 min
  12. Chapitre 12 : API REST Node.js et MongoDB : CRUD, validation Zod et erreurs35 min
  13. Chapitre 13 : Sécuriser MongoDB : authentification, rôles et injection NoSQL22 min
  14. Chapitre 14 : Sauvegarder et restaurer MongoDB : mongodump et mongorestore14 min
  15. Chapitre 15 : Exercices MongoDB corrigés, méthode pour l'E6 et aide-mémoire19 min
Commencer le cours

Questions fréquentes

C'est quoi MongoDB ?

MongoDB est une base de données NoSQL orientée documents : elle range ses données dans des documents proches du JSON (au format binaire BSON), regroupés en collections, au lieu de lignes dans des tables. Un document peut contenir des sous-documents et des tableaux, ce qui permet de lire un objet complet, comme une fiche de frais et ses lignes, en une seule opération. On l'interroge avec des objets JavaScript (db.fiches.find({ etat: 'CL' })) plutôt qu'en SQL (chapitre 2).

Quelle est la différence entre SQL et NoSQL ?

Une base SQL (relationnelle) range les données dans des tables au schéma fixe, reliées par des clés étrangères que le SGBD vérifie, et s'interroge en SQL avec des jointures. NoSQL regroupe les autres modèles : documents (MongoDB), clé-valeur (Redis), colonnes larges (Cassandra), graphes (Neo4j), chacun avec son propre langage. NoSQL ne veut pas dire « sans structure » : les données en ont une, mais c'est souvent l'application qui la vérifie (chapitre 1).

Quand utiliser MongoDB plutôt que MySQL ?

Choisis MongoDB quand les données ont une forme d'arbre lue d'un bloc (un objet et ses sous-éléments), quand leur structure varie ou évolue souvent, ou quand toute l'application est en JavaScript. Garde MySQL quand les données sont très liées entre elles, que l'intégrité doit être garantie par la base (clés étrangères, contraintes) ou que l'application produit beaucoup de statistiques croisées. La règle de modélisation de MongoDB tient en une phrase : ce qui est lu ensemble est rangé ensemble (chapitre 6).

MongoDB est-il gratuit ?

Oui : MongoDB Community Server est gratuit, y compris pour une application commerciale, sous licence SSPL. Le service en ligne Atlas propose une offre gratuite sans limite de durée (0,5 Go de données, MongoDB 8.0), suffisante pour un projet de BTS. Seules l'édition Enterprise et les offres Atlas plus puissantes sont payantes (chapitre 3).

Quelle est la différence entre MongoDB et Mongoose ?

MongoDB est la base de données ; Mongoose est une bibliothèque Node.js qui s'utilise par-dessus le driver officiel. Mongoose ajoute des schémas (types, champs obligatoires, valeurs par défaut), la validation avant l'enregistrement, des hooks et populate pour remplacer une référence par le document référencé. Le driver officiel mongodb suffit pour des scripts ; Mongoose est plus confortable pour une API métier (chapitres 9 et 10).

Comment faire une jointure avec MongoDB ?

Le plus souvent, on l'évite en imbriquant dans un document les données lues avec lui. Sinon, l'étape $lookup du pipeline d'agrégation ajoute à chaque document le tableau des documents correspondants d'une autre collection, comme un LEFT JOIN. Avec Mongoose, populate remplace une référence par le document référencé, au prix d'une deuxième requête (chapitre 8).

MongoDB gère-t-il les transactions ?

Oui. Toute écriture sur un document est atomique, et MongoDB offre depuis la version 4.0 des transactions ACID sur plusieurs documents et collections, à condition de tourner en replica set (c'est le cas d'Atlas). On les utilise moins qu'en SQL, parce qu'une bonne modélisation range souvent ensemble ce qui doit changer ensemble (chapitre 11).

C'est quoi l'injection NoSQL et comment s'en protéger ?

L'injection NoSQL consiste à envoyer un opérateur MongoDB à la place d'une valeur, par exemple { "$ne": null } comme mot de passe : si l'API recopie ce JSON dans son filtre, la condition devient toujours vraie. La protection principale est de valider le type de chaque entrée (avec un schéma Zod) ; on y ajoute l'option sanitizeFilter de Mongoose et on ne compare jamais un mot de passe dans un filtre. Le paquet express-mongo-sanitize ne fonctionne plus avec Express 5 (chapitre 13).

MongoDB est-il au programme du BTS SIO ?

MongoDB n'est pas imposé : en option SLAM, le cœur de la compétence « Gérer les données » reste le relationnel et SQL, que les sujets d'E7 utilisent. Mais le référentiel parle de développer des fonctionnalités au sein d'un SGBD « relationnel ou non », et à l'E6 la commission vérifie que « le type de base est pertinent ». Si une de tes réalisations utilise MongoDB, tu dois savoir justifier ce choix, expliquer ton modèle et ta sécurité (chapitre 15).