MongoDB est la base de données NoSQL la plus populaire du monde. Son modèle orienté documents (JSON/BSON) est parfaitement adapté aux applications web modernes avec des structures de données flexibles. Voici tout ce qu'il faut savoir sur mongodb.
NoSQL vs SQL : quand choisir MongoDB ?
Les bases SQL (MySQL, PostgreSQL) excellent pour les données relationnelles structurées avec des jointures complexes. mongodb brille pour les données hiérarchiques, les structures variables (chaque document peut avoir des champs différents), les applications nécessitant une scalabilité horizontale, et les prototypes où le schéma évolue rapidement.
Exemples idéaux pour mongodb : catalogue produits (attributs variables selon la catégorie), profils utilisateurs, logs d'événements, contenus de blog.
Modèle de données MongoDB
MongoDB stocke des documents BSON (Binary JSON) dans des collections (l'équivalent des tables SQL). Chaque document peut avoir une structure différente :
{
"_id": ObjectId("664d8a2f..."),
"titre": "Guide MongoDB",
"auteur": { "nom": "Alice", "email": "alice@test.com" },
"tags": ["NoSQL", "MongoDB", "Database"],
"contenu": "...",
"stats": { "vues": 1250, "likes": 42 },
"publié_le": ISODate("2025-04-18T10:00:00Z")
}
L'imbrication de documents évite les jointures coûteuses : un article et ses métadonnées sont dans un seul document.
CRUD avec MongoDB (Node.js)
const { MongoClient, ObjectId } = require('mongodb');
const client = new MongoClient(process.env.MONGODB_URI);
const db = client.db('mon_app');
const articles = db.collection('articles');
// Create
const result = await articles.insertOne({ titre: 'Mon article', tags: ['tech'] });
// Read
const article = await articles.findOne({ _id: new ObjectId('664d8a2f...') });
const recents = await articles.find({ statut: 'publié' })
.sort({ publié_le: -1 }).limit(10).toArray();
// Update
await articles.updateOne(
{ _id: new ObjectId('664d8a2f...') },
{ $set: { titre: 'Nouveau titre' }, $push: { tags: 'nouveau-tag' } }
);
// Delete
await articles.deleteOne({ _id: new ObjectId('664d8a2f...') });
Pipeline d'agrégation
Les agrégations mongodb permettent des calculs complexes sur les données :
const stats = await articles.aggregate([
{ $match: { statut: 'publié' } },
{ $group: { _id: '$categorie', count: { $sum: 1 }, vues: { $sum: '$stats.vues' } } },
{ $sort: { vues: -1 } },
{ $limit: 10 }
]).toArray();
Index dans MongoDB
Les index sont aussi essentiels en mongodb qu'en SQL :
// Index simple
await articles.createIndex({ slug: 1 }, { unique: true });
// Index composé
await articles.createIndex({ statut: 1, publié_le: -1 });
// Index texte pour la recherche full-text
await articles.createIndex({ titre: 'text', contenu: 'text' });
// Recherche texte
const results = await articles.find({ $text: { $search: 'mongodb nosql' } }).toArray();
Mongoose : ODM pour Node.js
Mongoose ajoute des schémas, validations et middlewares à mongodb :
const ArticleSchema = new mongoose.Schema({
titre: { type: String, required: true, maxlength: 100 },
slug: { type: String, unique: true },
tags: [String],
createdAt: { type: Date, default: Date.now }
});
La documentation MongoDB est très complète avec des exemples interactifs dans MongoDB Atlas.
Conclusion
MongoDB offre une flexibilité et une scalabilité remarquables pour les applications web modernes. Son modèle documentaire est naturel pour les développeurs JavaScript et les APIs REST/GraphQL. Choisissez mongodb quand vos données sont hiérarchiques, vos schémas évolutifs, ou que vous anticipez une forte volumétrie.
MongoDB excelle pour les données semi-structurées et les schémas évolutifs. Pour une utilisation avancée, maîtrisez les Aggregation Pipelines pour les requêtes complexes, les index composites et partiels pour accélérer les requêtes critiques, et le Change Streams pour réagir en temps réel aux modifications de données. En production, un Replica Set à 3 nœuds minimum garantit la haute disponibilité. MongoDB Atlas offre une couche managée avec backups automatiques et Atlas Search intégré. La documentation officielle MongoDB est exhaustive, et MongoDB University propose des formations gratuites certifiantes pour approfondir chaque aspect du système de base de données NoSQL.
Modélisation des données NoSQL
La modélisation MongoDB diffère fondamentalement du modèle relationnel : embarquez (embed) les données lues ensemble fréquemment dans le même document, et référencez les données partagées entre plusieurs documents. Cette décision impacte directement les performances des requêtes. Un document MongoDB ne devrait pas dépasser 16 MB (limite BSON), et les tableaux embarqués ne devraient pas croître indéfiniment pour éviter des problèmes de performances sur les mises à jour.