TW3 — Technologies du Web 3

Modélisation des relations dans MongoDB

Comparer références manuelles, documents imbriqués et usage de $lookup selon le besoin.

MongoDB ne fonctionne pas comme une base SQL avec jointures automatiques. On choisit donc entre référencer un autre document ou imbriquer directement les données qui voyagent ensemble.

📘 Références manuelles

Les références manuelles consistent à stocker l'identifiant d'un document dans un autre document. C'est utile quand les données liées évoluent séparément.

Collection utilisateurs

{
  _id: ObjectId("64f100000000000000000001"),
  nom: "Alice",
  email: "alice@example.com"
}

Collection commandes

{
  _id: ObjectId("64f200000000000000000001"),
  utilisateurId: ObjectId("64f100000000000000000001"),
  total: 49.9,
  statut: "payee"
}

Ici, une commande connaît son utilisateur via utilisateurId. On évite de dupliquer nom et email dans chaque commande.

📦 Documents imbriqués (embedding)

L'embedding consiste à ranger un sous-document directement dans le document parent. C'est pratique quand les données sont lues ensemble presque tout le temps.

Collection utilisateurs avec adresses imbriquées

{
  _id: ObjectId("64f100000000000000000002"),
  nom: "Bob",
  email: "bob@example.com",
  adresses: [
    {
      rue: "12 rue de la République",
      ville: "Albi",
      codePostal: "81000"
    }
  ]
}

Dans cet exemple, l'adresse fait partie du profil utilisateur. La lecture est simple, mais une même adresse ne doit pas être partagée entre plusieurs documents.

🔎 Récupérer les données liées avec $lookup

Quand vous gardez des références séparées, vous pouvez les rapprocher dans une agrégation avec $lookup.

db.commandes.aggregate([
  {
    $lookup: {
      from: "utilisateurs",
      localField: "utilisateurId",
      foreignField: "_id",
      as: "utilisateur"
    }
  }
])

Cette requête enrichit chaque document de commandes avec un tableau utilisateur contenant le document correspondant dans la collection utilisateurs.

Choisir la bonne stratégie

Utilisez l'embedding quand les données sont petites et consultées ensemble. Utilisez les références quand les documents vivent indépendamment ou grossissent vite.

🍃 Avantages et considérations

  • Références manuelles
    • Avantages : peu de duplication, mises à jour centralisées.
    • Limites : lecture plus complexe, souvent plusieurs requêtes ou une agrégation.
  • Documents imbriqués
    • Avantages : lecture directe, structure très naturelle pour les données liées.
    • Limites : duplication possible, mises à jour plus lourdes si les sous-documents changent souvent.

Le bon choix dépend surtout de la façon dont votre application lit et met à jour les données.

MongoDB

Terminez le quiz du chapitre pour le marquer comme complété.

Tableau de bord

On this page