TP NodeJS Mongodb Client :

API REST Node.js/Express/MongoDB pour la Gestion de Produits. Ce TP permettra de mettre en pratique la connexion à MongoDB, l'utilisation d'Express.js pour les routes REST, l'asynchronisme en Node.js, ainsi que les requêtes avancées de MongoDB (pagination, filtrage, recherche, tri) et quelques notions sur le framework d'aggregation.


Phase 1 : Initialisation du Projet et Connexion

1. Configuration du Projet Créer un dossier de projet (tp-mongodb-api).

npm install express mongodb dotenv
npm install -D nodemon # Pour le développement

2. Script de "Seeding"

  1. Se connecter à MongoDB.
  2. Récupérer les données de l'API https://dummyjson.com/products (utiliser fetch ou axios).
  3. Supprimer la collection products existante (pour un seed propre).
  4. Insérer les nouveaux produits dans la collection products (utiliser insertMany).
  5. Déconnecter le client MongoDB.

Phase 2 : Route de Récupération des Produits avec Fonctionnalités Avancées.

C'est la partie principale du TP, couvrant les exigences de filtrage/tri/pagination.

3. Modèle de Requête Avancée (/api/products)

L'objectif est que l'endpoint réponde à une requête de type :
GET /api/products?page=2&limit=10&category=smartphones&search=iphone&sort=price

  1. Exécuter la requête pour obtenir les produits paginés.
  2. Exécuter une requête séparée pour obtenir le nombre total de documents correspondant au $match (pour calculer le nombre total de pages).
  3. Retourner la réponse au format JSON incluant les produits, la page actuelle, la limite, et le total des produits.

Phase 3 : Requêtes d'Agrégation Avancée

L'objectif est d'ajouter un nouvel endpoint : GET /api/products/stats. Ce endpoint utilisera le pipeline d'agrégation pour répondre à plusieurs questions business.

5. Mise en place de l'Endpoint d'Agrégation.

Créer une nouvelle route : GET /api/products/stats.

6. Exercices d'Agrégation.

Chaque sous-partie ci-dessous correspond à un stage ou un ensemble de stages dans le pipeline d'agrégation.

Exercice 6.1 : Calcul des Statistiques Globales par Catégorie (Stades $group et $project)

Objectif : Retourner, pour chaque catégorie de produit :

  1. Le nombre total de produits.
  2. Le prix moyen (\mu).
  3. Le prix maximum.
  4. Le prix minimum.
  1. $group : Regrouper par le champ category. Utiliser les accumulateurs $sum, $avg, $max, $min.
  2. $sort : Trier les résultats par prix moyen décroissant.
  3. $project : Renommer les champs pour la clarté (ex: _id devient categoryName, $avgPrice devient averagePrice).

Exercice 6.2 : Recherche des Meilleurs/Pires Produits par Notation (Stades $sort et $limit)

Objectif : Trouver les 5 produits les mieux notés (rating) qui ont également un prix supérieur à 500$.

  1. $match : Filtrer pour garder uniquement les produits avec price supérieur à 500.
  2. $sort : Trier par le champ rating en ordre décroissant.
  3. $limit : Limiter le résultat aux 5 premiers documents.
  4. $project : Inclure seulement les champs title, price et rating.

Exercice 6.3 : Décomposition par Marque et Prix Total (Stades $unwind et $group - Avancé)

Note: La structure des données de dummyjson n'est pas optimale pour le $unwind, mais on peut simuler un cas d'usage avec le champ brand.

Objectif : Déterminer, pour chaque marque (brand), le stock total et la valeur totale du stock (somme de price * stock).

  1. $group : Regrouper par brand.
  2. Utiliser $sum deux fois :