Cours
MongoDB est une base de données NoSQL qui adopte une approche flexible et orientée documents pour stocker les données dans des documents de type JSON organisés en collections. Concrètement, avec MongoDB, vos données sont stockées dans un format qui ressemble beaucoup à du JSON. C’est lisible, facile à mapper au code et scalable. MongoDB est moderne et suit une logique différente des bases relationnelles. Les bases relationnelles stockent les données en lignes et en tables. Cette approche a ses avantages, mais l’un de ses défis majeurs est la création des relations via des tables supplémentaires. MongoDB résout ce problème grâce à un schéma flexible où les données sont stockées en collections et non en tables. Ainsi, les données liées à un objet peuvent être conservées avec l’objet lui-même. Dans ce tutoriel, nous allons passer en revue sept concepts que tout débutant doit connaître pour bien utiliser MongoDB. C’est parti.
Comprendre NoSQL et les bases orientées documents
Quand on pense base de données, on pense souvent à SQL, qui stocke les données sous forme de lignes, de tables et de relations. C’est idéal pour de nombreuses applications, surtout lorsque les données sont structurées. Mais cela peut devenir contraignant quand les données n’entrent pas parfaitement dans un modèle tabulaire.
C’est là qu’intervient NoSQL, littéralement « not only SQL ». Il s’agit d’une famille de bases de données qui s’éloignent du modèle tabulaire rigide pour offrir plus de flexibilité. Plutôt que de forcer toutes vos données dans des colonnes prédéfinies, vous les structurez selon le fonctionnement réel de votre application.
MongoDB est une base orientée documents, l’un des types NoSQL les plus populaires. Au lieu de lignes et de tables, les données sont stockées sous forme de documents dans des collections. Chaque document ressemble à du JSON, avec des paires clé-valeur, des tableaux et même des objets imbriqués. C’est très pratique pour représenter des données du monde réel. Par exemple, un profil utilisateur peut inclure adresses et préférences dans un seul enregistrement, sans les répartir sur plusieurs tables. Voici à quoi cela peut ressembler dans MongoDB.
{
"_id": "u123",
"name": "Moses Anu",
"email": "moses@example.com",
"addresses": [
{ "type": "home", "city": "Abuja" },
{ "type": "work", "city": "Lagos" }
],
"preferences": {
"language": "English",
"theme": "dark"
}
}
Notions d’architecture MongoDB
Pour travailler efficacement avec MongoDB, il faut comprendre comment les données sont organisées. Contrairement aux bases SQL, structurées en tables et lignes, MongoDB utilise des collections et des documents.
- Base de données : pensez-y comme au conteneur global. Comme avec MySQL, MongoDB permet d’avoir plusieurs bases pour différents projets ou applications.
- Collection : à l’intérieur de chaque base, vous avez des collections. C’est l’équivalent d’une table mais avec un schéma très souple, car MongoDB n’impose pas de schéma strict. Vous pouvez y insérer des documents aux champs différents.
- Document : c’est là que tout se passe. Un document est un objet de type JSON (en réalité, BSON en interne) qui contient vos données. Les documents peuvent inclure des objets et tableaux imbriqués, ce qui est beaucoup plus naturel pour les applications modernes. Nous parlerons du BSON au paragraphe suivant.
Pour mieux comprendre, prenons un exemple d’application e-commerce simple avec MongoDB. Notre structure serait la suivante :
- Une base de données appelée shopDB.
- À l’intérieur, une collection nommée products.
- Et dans cette collection, des documents représentant chaque produit avec des détails comme le nom, le prix et la catégorie.
Le schéma flexible
Pour illustrer le schéma flexible, dans notre exemple ci-dessus, un produit peut avoir un champ discount alors qu’un autre non. MongoDB n’impose pas les mêmes champs à tous les produits. Cette souplesse est l’une des raisons pour lesquelles les développeurs apprécient MongoDB, surtout pour des applications qui évoluent rapidement.
BSON et types de données
Si vous avez déjà travaillé avec JSON, MongoDB vous semblera très naturel. En réalité, MongoDB ne stocke pas vos données en JSON brut. Il utilise BSON, pour Binary JSON.
Qu’est-ce que le BSON et pourquoi MongoDB l’utilise-t-il ?
Le BSON, c’est un peu le cousin plus intelligent et plus efficace de JSON. Il conserve la structure lisible en paires clé-valeur appréciée des développeurs, mais ajoute quelques super-pouvoirs :
- Il prend en charge davantage de types que JSON (dates, décimaux, binaire brut, etc.).
- Il est optimisé pour un encodage/décodage rapide, ce qui accélère les requêtes MongoDB.
- Il stocke tout dans un format binaire compact, plus efficace pour de gros volumes de données.
En bref, le BSON offre à MongoDB la flexibilité de JSON plus les performances et la précision dont une base a besoin.
Types de données BSON courants
MongoDB prend en charge un large éventail de types. Voici les plus fréquents, avec exemples :
- String :
"name": "Alice" - Number :
"age": 28 - Boolean :
"isActive": true - Date :
"createdAt": ISODate("2025-08-18T10:00:00Z") - Array :
"skills": ["MongoDB", "Node.js", "React"] - Document embarqué : objets imbriqués dans des documents :
"address": {
"city": "Lagos",
"country": "Nigeria"
}
- ObjectId : type d’identifiant spécial utilisé par MongoDB pour les IDs uniques des documents.
ObjectId("64f5c9e8a5f76b1d2c3a4567")
Voici un exemple de document de profil utilisateur en BSON stocké dans MongoDB :
{
"_id": ObjectId("64f5c9e8a5f76b1d2c3a4567"),
"name": "Moses",
"age": 30,
"isActive": true,
"skills": ["Laravel", "MongoDB", "Vue"],
"address": {
"city": "Abuja",
"country": "Nigeria"
},
"createdAt": ISODate("2025-08-18T10:00:00Z")
}
À noter :
- Le champ
_idest généré automatiquement enObjectIdsi vous ne le définissez pas. - Les dates sont stockées en
ISODate, et non comme de simples chaînes. - Le document imbriqué
addresset le tableauskillsillustrent la souplesse de MongoDB par rapport aux lignes plates en SQL.
Principes de conception de schéma
Grâce à son schéma flexible, MongoDB permet de faire évoluer votre modèle de données au rythme de l’application. Mais sans une conception de schéma appropriée, cette flexibilité peut rapidement virer au désordre. Ce n’est pas parce que le schéma est flexible qu’il faut abandonner toute structure. Voici quelques principes à appliquer avec MongoDB.
Schéma flexible vs. sans schéma
On décrit souvent MongoDB comme sans schéma, ce qui prête à confusion. Chaque document a bien un schéma—il n’est simplement pas imposé au niveau de la base, sauf si vous ajoutez des règles de validation.
Par exemple, deux documents d’une même collection users peuvent techniquement être très différents :
// Document 1
{ "name": "Alice", "email": "alice@example.com" }
// Document 2
{ "username": "Bob123", "age": 29 }
Cette flexibilité est utile en phase de prototypage rapide, mais en production, vous voudrez généralement plus de cohérence. C’est là qu’intervient la validation JSON Schema. Vous pouvez imposer des règles pour éviter des données incohérentes ou peu fiables.
Imbrication vs. référence de documents
Une autre décision clé concerne la modélisation des relations. Voici les approches possibles dans MongoDB.
Imbrication (données incluses dans un document)
MongoDB permet d’imbriquer des documents. Cette approche est idéale pour des données consultées ensemble. Par exemple, un article de blog avec ses commentaires stockés directement à l’intérieur. Exemple :
{
"title": "Intro to MongoDB",
"comments": [
{ "user": "Alice", "text": "Great post!" },
{ "user": "Bob", "text": "Very helpful." }
]
}
Stockées ainsi, les données offrent de meilleures performances et nécessitent moins de requêtes. Mal structurée, cette approche peut toutefois produire des documents trop volumineux.
Références (liaisons entre documents)
Lorsque le volume de données liées devient important ou est réutilisé souvent, il est conseillé de relier les données entre documents via des références.
Par exemple, pour un article avec de nombreux commentaires, on peut ne stocker que les IDs des commentaires, les commentaires eux-mêmes vivant dans leur propre collection. Exemple :
// Blog post
{ "title": "Intro to MongoDB", "commentIds": [ObjectId("..."), ObjectId("...")] }
// Separate comment document
{ "_id": ObjectId("..."), "user": "Alice", "text": "Great post!" }
Cette structure maintient des documents plus petits, évite la duplication et facilite la maintenance. Elle nécessite toutefois plusieurs requêtes (vous pouvez utiliser des jointures $lookup en agrégation).
Éviter les erreurs courantes de conception de schéma
Surimbrication : comme le schéma est flexible, on peut être tenté de tout mettre dans un seul document. C’est déconseillé et dégrade les performances. MongoDB impose une taille maximale de 16 Mo par document pour encourager une structuration adéquate.
Ignorer les index : ne négligez pas les index. Si vos requêtes ne correspondent pas à votre conception, vous aurez des recherches lentes. Concevez toujours en fonction des schémas d’accès.
Traiter MongoDB comme du SQL : il est parfois pertinent de découper en petits documents, mais n’oubliez pas la souplesse du modèle document. Si vous copiez tel quel un schéma relationnel (beaucoup de petites tables/collections normalisées), vous perdez les avantages du modèle document.
Prenez le temps de concevoir vos schémas. Un schéma réfléchi impacte fortement les performances de vos applications.
Validation des données
MongoDB est flexible. Sans garde-fous, cela peut mener à des données non structurées et désorganisées. C’est là que la validation des données intervient.
Voyez la validation comme des règles du jeu pour vos collections. Elle garantit que tout document inséré ou mis à jour respecte certaines contraintes, comme exiger un email ou s’assurer que « age » est toujours un nombre.
Utiliser JSON Schema pour valider dans MongoDB
MongoDB prend en charge JSON Schema pour la validation. C’est une norme pour décrire la forme de vos documents. Vous pouvez imposer, par exemple :
- Des champs obligatoires.
- Des types de données (string, number, date, etc.).
- Des intervalles de valeurs ou des motifs de chaîne.
La validation permet d’allier la souplesse du schéma MongoDB et des garde-fous pour garder des données propres.
Imposer des règles pour garder des données propres
Supposons une collection users. Nous voulons garantir que :
- Chaque utilisateur a un nom (string).
- Chaque utilisateur a un email (string, au format email).
- Si l’âge existe, il doit être un nombre supérieur ou égal à 18.
Voici comment l’imposer via un validateur JSON Schema :
db.createCollection("users", {
validator: {
$jsonSchema: {
bsonType: "object",
required: ["name", "email"],
properties: {
name: {
bsonType: "string",
description: "must be a string and is required"
},
email: {
bsonType: "string",
pattern: "^.+@.+\\..+$",
description: "must be a valid email address"
},
age: {
bsonType: "int",
minimum: 18,
description: "must be an integer greater than or equal to 18"
}
}
}
}
})
MongoDB s’assure ainsi que seules des données valides sont enregistrées dans la collection.
Opérations CRUD
Au cœur de MongoDB se trouvent quatre opérations de base : create, read, update et delete, plus connues sous l’acronyme CRUD.
Si vous maîtrisez le CRUD, vous pouvez construire presque n’importe quelle application. MongoDB simplifie cela avec quelques méthodes intuitives. Parcourons-les.
Create
Pour ajouter un document à une collection, utilisez insertOne(). Par exemple, on peut créer un utilisateur dans la collection users :
db.users.insertOne({
name: "Alice",
email: "alice@example.com",
age: 25
})
MongoDB génère automatiquement un _id unique pour chaque document créé.
Read
Lire des données est direct avec find(). Vous pouvez récupérer tous les documents ou filtrer avec des conditions. Le code ci-dessous récupère tous les utilisateurs.
// Find all users
db.users.find()
On peut filtrer sur une clé unique—par exemple l’email.
// Find one user by email
db.users.find({ email: "alice@example.com" })
find() renvoie toujours un curseur (que vous pouvez itérer). Si vous ne voulez qu’une seule correspondance, utilisez findOne().
Update
Une fois les données créées, vous aurez besoin de les modifier. Pour cela, utilisez updateOne(). On précise un filtre et les changements à appliquer.
// Mettre à jour l’âge d’Alice
db.users.updateOne(
{ email: "alice@example.com" },
{ $set: { age: 26 } }
)
L’opérateur $set met à jour uniquement le champ indiqué, sans toucher au reste du document.
Delete
Enfin, vous pouvez supprimer des documents avec deleteOne() ou deleteMany(). Exemple d’un deleteOne :
// Supprimer l’enregistrement d’Alice
db.users.deleteOne({ email: "alice@example.com" })
Attention, les suppressions sont définitives.
Avec ces quatre opérations, vous pouvez construire de tout, d’une to-do à une plateforme e-commerce.
Bonnes pratiques de sécurité
La sécurité ne doit jamais être une réflexion après coup lorsqu’il s’agit de bases de données. Voyons les bonnes pratiques essentielles à connaître au départ.
Authentification et autorisation
Par défaut, une installation neuve de MongoDB peut ne pas imposer d’authentification. Cela signifie que n’importe qui pouvant se connecter pourrait accéder à vos données. C’est un risque majeur. Pour ne pas laisser votre MongoDB ouvert, mettez en place authentification et autorisation.
- Authentification : garantit que seules des personnes valides se connectent.
- Autorisation : garantit que même authentifiés, les utilisateurs ne font que ce qui leur est permis.
Par exemple, au lieu d’utiliser un compte root/admin partout, créez des comptes dédiés à des tâches précises.
// Créer un utilisateur en lecture seule
db.createUser({
user: "reportViewer",
pwd: "strongPassword123",
roles: [ { role: "read", db: "salesDB" } ]
})
Cet utilisateur ne peut que lire les données de salesDB, pas écrire ni supprimer.
Contrôle d’accès basé sur les rôles (RBAC)
MongoDB utilise des rôles pour gérer les permissions. Parmi les rôles intégrés :
- Read : consultation uniquement.
- ReadWrite : lecture et modification.
- DbAdmin : gestion des index, statistiques et profilage.
- Root : contrôle total. À éviter pour le quotidien !
Appliquez le principe du moindre privilège : donner juste les droits nécessaires tout en sécurisant la base.
Éviter l’exposition publique
L’une des erreurs les plus fréquentes consiste à laisser MongoDB écouter sur le port par défaut (27017) et à se lier à 0.0.0.0 (toutes interfaces réseau).
Cela ouvre votre base à tout Internet. Pour éviter cela, prenez les mesures suivantes :
- Lier MongoDB uniquement à
localhostou à une IP privée/interne. - Utiliser un pare-feu (ou un groupe de sécurité cloud) pour restreindre l’accès.
- Toujours se connecter via un VPN ou un tunnel SSH si un accès distant est nécessaire.
# Example: /etc/mongod.conf
net:
port: 27017
bindIp: 127.0.0.1 # Only accessible locally
Avec ces pratiques, votre déploiement MongoDB sera bien mieux protégé contre les fuites accidentelles ou les attaques malveillantes.
Conclusion
MongoDB s’est imposé comme l’une des bases incontournables pour les applications modernes grâce à sa flexibilité et sa puissance. Que vous bricoliez un side project ou pilotiez un système à grande échelle, maîtriser les fondamentaux vous fera gagner un temps précieux et boostera votre productivité. Dans cet article, nous avons exploré sept concepts clés pour bien démarrer avec MongoDB :
- Comprendre NoSQL et les bases orientées documents.
- Notions d’architecture MongoDB.
- BSON et types de données.
- Principes de conception de schéma.
- Validation des données.
- Opérations CRUD.
- Bonnes pratiques de sécurité.
Une bonne compréhension de ces notions vous donnera des bases solides avec MongoDB. Pour aller plus loin, consultez la documentation MongoDB et le cours DataCamp Introduction to MongoDB in Python.
FAQs
Quelle est la différence entre les bases NoSQL et SQL ?
Les bases NoSQL comme MongoDB stockent les données dans des formats flexibles orientés documents, tandis que les bases SQL utilisent des tables structurées avec des schémas fixes.
Comment fonctionne l’architecture de MongoDB ?
MongoDB s’appuie sur une architecture distribuée et scalable avec des composants comme les replica sets pour la haute disponibilité et le sharding pour l’évolutivité horizontale.
Qu’est-ce que le BSON et pourquoi MongoDB l’utilise-t-il ?
BSON (Binary JSON) est le format de données de MongoDB, conçu pour stocker efficacement des documents de type JSON tout en prenant en charge des types supplémentaires.
Pourquoi la conception de schéma est-elle importante dans MongoDB ?
Même si MongoDB est réputé sans schéma, une conception soignée garantit des requêtes efficaces, moins de redondance et de meilleures performances applicatives.
Comment sécuriser ma base MongoDB quand je débute ?
Activez l’authentification, utilisez le contrôle d’accès par rôles, imposez les connexions TLS/SSL et mettez régulièrement à jour MongoDB pour corriger les vulnérabilités.

Ingénieur logiciel