Skip to main content

TP NoSQL - Pokémon (MongoDB)

Objectif du TP

L’objectif de ce TP est de découvrir et pratiquer les bases de MongoDB et du NoSQL orienté document à travers la modélisation et la manipulation d’une base de données inspirée d’un jeu Pokémon.

À la fin du TP, les étudiants devront être capables :

  • de comprendre les principes du NoSQL et du stockage par documents,
  • de modéliser des données avec MongoDB,
  • de gérer les relations par références et/ou documents imbriqués,
  • d’insérer des données de test,
  • d’écrire des requêtes MongoDB simples (find, aggregate, etc.).

Contexte

Le but est de modéliser une première partie de la base de données permettant de stocker :

  • les Pokémon existants (espèces),
  • les Pokémon possédés par un joueur,
  • les compétences,
  • l’inventaire d’un joueur.

Contrairement au SQL, MongoDB ne repose pas sur des tables et des jointures classiques, mais sur des collections et des documents JSON.

La finalité du projet sera, dans un TP ultérieur (ou une démo si le temps est insuffisant), de créer :

  • un microservice backend en Node.js utilisant MongoDB,
  • un frontend permettant d’afficher et de modifier les données.

Quelques points importants de modélisation NoSQL

  • Pokemon (collection)
    Cette collection représente les espèces de Pokémon existantes dans le jeu.
    Exemple : Salamèche, Carapuce, Bulbizarre.

  • Players (collection)
    Un joueur possède :

    • une liste de Pokémon (pokemons),
    • un inventaire (inventory).
  • Pokemon du joueur
    Les Pokémon possédés par un joueur peuvent :

    • référencer une espèce de Pokémon (pokemonId),
    • stocker leurs propres données (niveau, compétences apprises, etc.).
  • Abilities (collection)
    Les compétences peuvent être :

    • référencées depuis les Pokémon,
    • ou stockées directement comme identifiants dans les documents.
  • Un Pokémon peut apprendre plusieurs compétences.

  • Le Pokémon d’un joueur peut apprendre jusqu’à 4 compétences maximum (règle métier).

Exemple de relations en NoSQL

  • Un Pokémon peut apprendre plusieurs compétences
    → tableau d’identifiants abilityIds.

  • Une compétence peut être apprise par plusieurs Pokémon
    → relation gérée par références (pas de jointure).

Travail demandé

Vous devez écrire les scripts MongoDB suivants, chacun dans un fichier séparé (ou dans un même fichier bien structuré) :

1. Script de nettoyage de la base de données

  • Suppression de la base existante
    ou
  • Suppression des collections (drop()).

2. Script de création des collections

  • Création des collections principales :
    • pokemons
    • abilities
    • players
  • Ajout éventuel de validateurs de schéma ($jsonSchema).

3. Modélisation des relations

  • Choisir entre :
    • références (ObjectId)
    • documents imbriqués
  • Justifier les choix de modélisation.

4. Script d’insertion de données de test

  • Insérer des données simples :
    • 3 Pokémon (espèces),
    • quelques compétences,
    • 1 joueur,
    • un inventaire minimal,
    • des Pokémon possédés par le joueur avec des compétences.

5. Script de test (requêtes MongoDB)

Les requêtes doivent permettre de :

  • récupérer les Pokémon d’un joueur,
  • récupérer un Pokémon spécifique d’un joueur,
  • récupérer les compétences qu’un Pokémon peut apprendre,
  • récupérer les compétences apprises par un Pokémon du joueur,
  • récupérer l’espèce d’un Pokémon appartenant à un joueur,
  • récupérer un item spécifique dans l’inventaire d’un joueur.

Les requêtes devront utiliser :

  • find
  • findOne
  • projections
  • éventuellement aggregate pour les cas plus complexes.