Module 1 : Introduction à MongoDB

Qu'est-ce que MongoDB ?

MongoDB est une base de données NoSQL orientée documents :


+----------------------------------------------------------+
|                      MongoDB                              |
+----------------------------------------------------------+
|                                                           |
|   Type        : Base NoSQL orientée documents            |
|   Format      : BSON (Binary JSON)                       |
|   Schema      : Flexible (schema-less)                   |
|   Scalabilite : Horizontale (sharding)                   |
|                                                           |
|   Hierarchie:                                             |
|       Database > Collection > Document                    |
|                                                           |
+----------------------------------------------------------+
            

SQL vs MongoDB

SQL MongoDB
Database Database
Table Collection
Row Document
Column Field
Primary Key _id
JOIN $lookup / Embedding

Structure d'un document

// Document MongoDB (format BSON/JSON)
{
    "_id": ObjectId("507f1f77bcf86cd799439011"),
    "nom": "Dupont",
    "prenom": "Jean",
    "email": "jean.dupont@example.com",
    "age": 35,
    "actif": true,
    "dateCreation": ISODate("2024-01-15T10:30:00Z"),
    "adresse": {
        "rue": "123 Rue de la Paix",
        "ville": "Paris",
        "codePostal": "75001"
    },
    "competences": ["Python", "MongoDB", "Azure"],
    "scores": [
        { "matiere": "math", "note": 85 },
        { "matiere": "info", "note": 92 }
    ]
}

Types de données BSON

Types principaux :
  • String - Chaines de caractères UTF-8
  • Number - Int32, Int64, Double, Decimal128
  • Boolean - true / false
  • Date - ISODate
  • ObjectId - Identifiant unique 12 bytes
  • Array - Listes de valeurs
  • Object - Documents imbriqués
  • Null - Valeur nulle
  • Binary - Données binaires

ObjectId

// Structure d'un ObjectId (12 bytes)
ObjectId("507f1f77bcf86cd799439011")
         |______||____||__||______|
            |      |    |     |
            |      |    |     +-- Compteur (3 bytes)
            |      |    +-------- Process ID (2 bytes)
            |      +------------- Machine ID (3 bytes - deprecated)
            +-------------------- Timestamp (4 bytes)

// Extraire le timestamp
ObjectId("507f1f77bcf86cd799439011").getTimestamp()
// -> ISODate("2012-10-17T20:46:22Z")

MongoDB Shell (mongosh)

# Connexion à MongoDB
mongosh "mongodb://localhost:27017"
mongosh "mongodb+srv://cluster.mongodb.net/mydb"

# Commandes de base
show dbs                    # Lister les bases
use folab                   # Sélectionner/créer une base
show collections            # Lister les collections
db.stats()                  # Stats de la base

# Créer une collection
db.createCollection("users")

# Insérer un document
db.users.insertOne({
    nom: "Martin",
    email: "martin@test.com"
})

# Lire tous les documents
db.users.find()

# Compter les documents
db.users.countDocuments()

MongoDB Atlas (Cloud)

MongoDB Atlas est le service cloud managé de MongoDB :
  • Clusters hébergés (AWS, Azure, GCP)
  • Tier gratuit disponible (M0)
  • Backups automatiques
  • Scaling automatique
  • Interface web pour administration
# Connection string Atlas
mongodb+srv://<user>:<password>@cluster0.xxxxx.mongodb.net/<database>

# Exemple avec Python
from pymongo import MongoClient

client = MongoClient("mongodb+srv://user:pass@cluster0.xxx.mongodb.net/")
db = client["folab"]
collection = db["users"]

# Inserer
result = collection.insert_one({"nom": "Test", "age": 30})
print(f"Inserted ID: {result.inserted_id}")

# Lire
for doc in collection.find():
    print(doc)

Drivers MongoDB

# Python (PyMongo)
pip install pymongo

# Node.js
npm install mongodb

# Java
<dependency>
    <groupId>org.mongodb</groupId>
    <artifactId>mongodb-driver-sync</artifactId>
    <version>4.11.0</version>
</dependency>

# .NET
dotnet add package MongoDB.Driver

Cas d'usage MongoDB

MongoDB est idéal pour :
  • Applications avec schéma évolutif
  • Données semi-structurées (JSON, logs)
  • Catalogues produits (e-commerce)
  • Gestion de contenu (CMS)
  • IoT et données temps réel
  • Applications mobiles
MongoDB n'est PAS idéal pour :
  • Transactions complexes multi-documents
  • Relations fortement liées (mieux avec SQL)
  • Reporting analytique lourd