Projet Pratique

DataShop Analytics - Base de données produits MongoDB

Projet Unifie : DataShop Analytics

Créez et manipulez une base MongoDB pour gérer le catalogue produits et les commandes. Exportez les données vers Azure pour l'analytics Synapse.

Durée estimée : 45-60 minutes | Cout : Gratuit (MongoDB Atlas M0)

Objectifs de ce module

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

  1. Allez sur mongodb.com/cloud/atlas
  2. Cliquez sur "Try Free"
  3. Créez un compte (ou connectez-vous avec Google/GitHub)
  4. Complétez le questionnaire d'onboarding

2 Créer un cluster gratuit

  1. Dans Atlas, cliquez sur "Build a Database"
  2. Sélectionnez "M0 FREE" (Shared)
  3. Provider : Azure
  4. Region : Western Europe (Netherlands)
  5. Cluster name : datashop-cluster
  6. 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é :
  1. Database Access : Créez un utilisateur
    • Username : datashop-admin
    • Password : Générez un mot de passe fort
    • Role : Atlas admin
  2. 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

  1. Dans Atlas, cliquez sur "Connect"
  2. Sélectionnez "Shell"
  3. Copiez la connection string
  4. 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")

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

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")

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] }
    }
  }
])

9 Exporter vers Azure

Exportez les données MongoDB vers Azure pour les analyser avec Synapse.

Option 1 : Export manuel (MongoDB Compass)
  1. Installez MongoDB Compass
  2. Connectez-vous a Atlas
  3. Sélectionnez la collection products
  4. Cliquez "Export Collection"
  5. Format : CSV ou JSON
  6. 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

Projet DataShop Complété !

Félicitations ! Vous avez construit une plateforme analytics complète :

  • Azure Cloud : Infrastructure (Storage, Data Lake)
  • Synapse : Analytics SQL sur fichiers
  • DevOps : CI/CD pour l'infrastructure
  • MongoDB : Base de données produits

Recommencer le parcours | Retour aux cours MongoDB