Durée estimée : 45-60 minutes | Cout : Gratuit (MongoDB Atlas M0)
Objectifs de ce module
- Créer un cluster MongoDB Atlas gratuit
- Modéliser les documents produits et commandes
- Exécuter des opérations CRUD
- Créer des index pour les performances
- Utiliser l'Aggregation Framework
- Exporter les données vers Azure
MongoDB Atlas Free Tier (M0)
- 512 Mo de stockage
- Shared RAM/CPU
- Pas d'expiration (gratuit a vie)
- 3 noeuds replica set
- Limite : 100 connexions, pas de backup configurable
1 Créer un compte MongoDB Atlas GRATUIT
- Allez sur mongodb.com/cloud/atlas
- Cliquez sur "Try Free"
- Créez un compte (ou connectez-vous avec Google/GitHub)
- Complétez le questionnaire d'onboarding
2 Créer un cluster gratuit
- Dans Atlas, cliquez sur "Build a Database"
- Sélectionnez "M0 FREE" (Shared)
- Provider : Azure
- Region : Western Europe (Netherlands)
- Cluster name : datashop-cluster
- Cliquez "Create Cluster"
Pourquoi Azure comme provider ? Pour minimiser la latence avec vos ressources Azure (Storage, Synapse) situées aussi en West Europe.
Configurer la sécurité :
- Database Access : Créez un utilisateur
- Username :
datashop-admin - Password : Générez un mot de passe fort
- Role :
Atlas admin
- Username :
- Network Access : Ajoutez votre IP
- Cliquez "Add IP Address"
- Sélectionnez "Allow Access from Anywhere" (pour le lab uniquement)
Sécurité : En production, n'autorisez jamais "Anywhere". Utilisez des IP spécifiques ou des VPN/PrivateLink.
3 Se connecter via MongoDB Shell
- Dans Atlas, cliquez sur "Connect"
- Sélectionnez "Shell"
- Copiez la connection string
- Si vous n'avez pas mongosh :
- Utilisez le "MongoDB Shell" intégré dans Atlas (Data Explorer)
- Ou installez mongosh
# Connection string (remplacez par la votre)
mongosh "mongodb+srv://datashop-cluster.xxxxx.mongodb.net/" --username datashop-admin
Alternative web : Dans Atlas, cliquez sur "Browse Collections" pour utiliser l'interface web sans installer mongosh.
4 Créer la base et les collections
// Sélectionner/créer la base de données
use datashop
// La base est créée automatiquement au premier insert
// Mais on peut créer des collections explicitement
db.createCollection("products")
db.createCollection("orders")
db.createCollection("customers")
Voir la théorie : Module 1 - Collections et Documents
5 Inserer les produits DataShop
// Insérer les produits
db.products.insertMany([
{
product_id: 1,
name: "Laptop Pro 15",
category: "Electronics",
price: 1299.99,
stock: 50,
specs: {
brand: "TechPro",
cpu: "Intel i7",
ram: "16GB",
storage: "512GB SSD"
},
tags: ["laptop", "professional", "high-performance"],
created_at: new Date("2024-01-15")
},
{
product_id: 2,
name: "Wireless Mouse",
category: "Electronics",
price: 29.99,
stock: 200,
specs: {
brand: "ClickMaster",
type: "Wireless",
dpi: 3200
},
tags: ["mouse", "wireless", "ergonomic"],
created_at: new Date("2024-01-16")
},
{
product_id: 3,
name: "USB-C Hub",
category: "Electronics",
price: 49.99,
stock: 150,
specs: {
brand: "HubMax",
ports: ["USB-C", "USB-A x3", "HDMI", "SD Card"]
},
tags: ["hub", "usb-c", "connectivity"],
created_at: new Date("2024-01-17")
},
{
product_id: 4,
name: "Mechanical Keyboard",
category: "Electronics",
price: 89.99,
stock: 100,
specs: {
brand: "KeyMaster",
switches: "Cherry MX Blue",
backlight: "RGB"
},
tags: ["keyboard", "mechanical", "gaming"],
created_at: new Date("2024-01-18")
},
{
product_id: 5,
name: "Monitor 27inch",
category: "Electronics",
price: 399.99,
stock: 75,
specs: {
brand: "ViewPro",
resolution: "2560x1440",
refresh_rate: "144Hz",
panel: "IPS"
},
tags: ["monitor", "gaming", "4k"],
created_at: new Date("2024-01-19")
},
{
product_id: 11,
name: "Office Chair",
category: "Furniture",
price: 249.99,
stock: 40,
specs: {
brand: "ComfortPlus",
material: "Mesh",
adjustable: true
},
tags: ["chair", "ergonomic", "office"],
created_at: new Date("2024-02-20")
},
{
product_id: 12,
name: "Standing Desk",
category: "Furniture",
price: 599.99,
stock: 25,
specs: {
brand: "FlexDesk",
motor: "Electric",
height_range: "60-125cm"
},
tags: ["desk", "standing", "electric"],
created_at: new Date("2024-02-22")
}
])
// Verifier
db.products.countDocuments()
{ acknowledged: true, insertedIds: { '0': ObjectId(...), ... } }
7
Voir la théorie : Module 2 - Opérations CRUD
6 Requetes de lecture
// Trouver tous les produits Electronics
db.products.find({ category: "Electronics" })
// Produits a moins de 100€
db.products.find({ price: { $lt: 100 } })
// Produits avec tag "gaming"
db.products.find({ tags: "gaming" })
// Projection : seulement nom et prix
db.products.find(
{ category: "Electronics" },
{ name: 1, price: 1, _id: 0 }
)
// Tri par prix décroissant
db.products.find().sort({ price: -1 })
// Produits avec stock faible (< 50)
db.products.find({ stock: { $lt: 50 } })
7 Créer des index
// Index sur la catégorie (requête fréquente)
db.products.createIndex({ category: 1 })
// Index sur le prix (pour les tris et filtres)
db.products.createIndex({ price: 1 })
// Index composé pour les recherches par catégorie + prix
db.products.createIndex({ category: 1, price: -1 })
// Index sur les tags (array)
db.products.createIndex({ tags: 1 })
// Vérifier les index
db.products.getIndexes()
// Expliquer une requête
db.products.find({ category: "Electronics" }).explain("executionStats")
Voir la théorie : Module 3 - Indexation
8 Aggregation Pipeline
// Stats par catégorie
db.products.aggregate([
{
$group: {
_id: "$category",
count: { $sum: 1 },
avgPrice: { $avg: "$price" },
totalStock: { $sum: "$stock" },
minPrice: { $min: "$price" },
maxPrice: { $max: "$price" }
}
},
{
$sort: { count: -1 }
}
])
// Valeur totale du stock par catégorie
db.products.aggregate([
{
$project: {
category: 1,
stockValue: { $multiply: ["$price", "$stock"] }
}
},
{
$group: {
_id: "$category",
totalStockValue: { $sum: "$stockValue" }
}
},
{
$sort: { totalStockValue: -1 }
}
])
// Top 3 produits les plus chers par catégorie
db.products.aggregate([
{ $sort: { price: -1 } },
{
$group: {
_id: "$category",
topProducts: { $push: { name: "$name", price: "$price" } }
}
},
{
$project: {
category: "$_id",
top3: { $slice: ["$topProducts", 3] }
}
}
])
Voir la théorie : Module 4 - Aggregation Framework
9 Exporter vers Azure
Exportez les données MongoDB vers Azure pour les analyser avec Synapse.
Option 1 : Export manuel (MongoDB Compass)
- Installez MongoDB Compass
- Connectez-vous a Atlas
- Sélectionnez la collection
products - Cliquez "Export Collection"
- Format : CSV ou JSON
- Uploadez le fichier vers Azure Storage (container
raw)
Option 2 : Export avec mongoexport (CLI)
# Exporter en CSV
mongoexport --uri="mongodb+srv://datashop-admin:PASSWORD@datashop-cluster.xxxxx.mongodb.net/datashop" \
--collection=products \
--type=csv \
--fields=product_id,name,category,price,stock,created_at \
--out=products_mongo.csv
# Uploader vers Azure (Azure CLI)
az storage blob upload \
--account-name stdatashopdevweu001 \
--container-name raw \
--name mongodb/products_mongo.csv \
--file products_mongo.csv
Option 3 : Azure Data Factory (automatise)
Pour une intégration continue, utilisez Azure Data Factory avec le connecteur MongoDB Atlas pour copier automatiquement les données vers le Data Lake.
Intégration avec Synapse : Une fois les données dans le Data Lake, vous pouvez les interroger avec Synapse SQL Serverless comme vu dans le module pratique Synapse.
Vérification - Cochez quand terminé
Ressources créées
| Ressource | Nom | Cout |
|---|---|---|
| Cluster Atlas | datashop-cluster |
Gratuit (M0) |
| Base de données | datashop |
Inclus |
| Collections | products, orders, customers |
Inclus |