Introduction à MongoDB

MongoDB est une base de données NoSQL orientée documents qui offre flexibilité et scalabilité.

Concepts clés

  • Base de données : Conteneur physique pour les collections
  • Collection : Groupe de documents MongoDB (équivalent table SQL)
  • Document : Enregistrement composé de paires clé-valeur (format BSON)
  • Champ : Paire clé-valeur dans un document

Structure des données

// Exemple de document
{
    "_id": ObjectId("5f9e1b9b9d3b2c1d2c1d2c1d"),
    "titre": "MongoDB Introduction",
    "auteur": {
        "nom": "Dupont",
        "email": "dupont@example.com"
    },
    "tags": ["nosql", "database", "mongodb"],
    "vues": 100,
    "commentaires": [
        {
            "utilisateur": "Jean",
            "texte": "Super article!"
        }
    ]
}

Opérations CRUD de base

Create & Read

// Insérer un document
db.articles.insertOne({
    titre: "Mon article",
    contenu: "Contenu de l'article"
})

// Lire des documents
db.articles.find({ titre: "Mon article" })
db.articles.findOne({ _id: ObjectId("...") })

Update & Delete

// Mettre à jour un document
db.articles.updateOne(
    { titre: "Mon article" },
    { $set: { contenu: "Nouveau contenu" } }
)

// Supprimer un document
db.articles.deleteOne({ titre: "Mon article" })

Requêtes avancées

// Opérateurs de comparaison
db.produits.find({
    prix: { $gt: 100, $lt: 200 }
})

// Opérateurs logiques
db.articles.find({
    $or: [
        { categorie: "Tech" },
        { tags: "mongodb" }
    ]
})

// Agrégation
db.ventes.aggregate([
    { $match: { date: { $gte: new Date('2024-01-01') } } },
    { $group: { _id: "$categorie", total: { $sum: "$montant" } } }
])

Index

// Créer un index simple
db.users.createIndex({ email: 1 })

// Index composé
db.produits.createIndex(
    { categorie: 1, prix: -1 }
)

// Index unique
db.users.createIndex(
    { email: 1 },
    { unique: true }
)

Avantages de MongoDB

Points forts

  • Schéma flexible
  • Scalabilité horizontale
  • Haute disponibilité
  • Performance en lecture/écriture
  • Support natif du JSON

Cas d'utilisation

  • Applications temps réel
  • Big Data
  • Contenu dynamique
  • IoT et données mobiles
  • Catalogues de produits