Ministère de l’enseignement supérieur et de la recherche scientifique
Institut supérieur des études technologiques de Bizerte
Atelier No SQL
TP 2 – MongoDB (2/2)
Enseignante : Safa MAHOUACHI
1. Introduction
Ce TP porte sur les opérations avancées avec MongoDB. A la fin de ce TP, vous serez capable de :
• Utiliser la fonction aggregate() et comprendre la logique des pipelines.
• Manipuler les stages principaux : $match, $project, $group, $sort, $limit.
• Exploiter des opérateurs d’agrégation simples ($sum, $avg, $max, $min, $count, etc.).
• Faire des groupages et calculs d’agrégats.
• Utiliser $lookup pour réaliser des jointures entre collections.
2. Documentation
Pour ce TP, référez-vous au cours disponible à travers le lien suivant : [Link]
nosql-mongodb
N’hésitez pas à consulter ce lien pour consulter les opérations MongoDB
3. Travail à faire
3.1. Préparation de l’environnement
Importer le fichier [Link] et vérifier que l’import est effectué avec succès.
3.2. Premiers pipelines
a) Projection : Afficher uniquement le title, isbn et pageCount de chaque livre.
b) Filtrage avec $match : Afficher les livres de plus de 500 pages.
c) Tri avec $sort : Trier les livres par publishedDate décroissante.
d) Combinaison de stages : Les 5 livres les plus récents, ne montrer
que title et publishedDate.
3.3. Groupage et agrégats
e) Compter combien de livres par catégorie (categories).
f) Moyenne du nombre de pages par catégorie.
g) Nombre total de pages publiées par auteur.
3.4. Opérateurs avancés
h) Trouver le livre le plus long (max pages).
i) Nombre de livres publiés par année (extraction avec $year).
Remarque, convertir le type de “publishedDate” en ISODate en utilisant le script suivant:
[Link]().forEach(doc => {
if ([Link] && [Link].$date) {
[Link](
{ _id: doc._id },
NoSQL – Safa MAHOUACHI Page 1
~Bon travail~
{ $set: { publishedDate: new Date([Link].$date) } }
)
}
})
3.5. Jointures avec $lookup
Créer une nouvelle collection [Link] puis l’importer. Associer ensuite les livres aux
éditeurs (ajouter un champ "publisherId" dans quelques livres de [Link]).
[
{ "_id": 1, "name": "Manning", "country": "USA" },
{ "_id": 2, "name": "O’Reilly", "country": "USA" },
{ "_id": 3, "name": "Eyrolles", "country": "France" }
]
j) Afficher chaque livre avec son éditeur, n’afficher que le titre et l’éditeur. Puis modifier la
requête pour afficher seulement le titre et le nom de l’éditeur de chaque livre.
k) Compter combien de livres par éditeur
l) Top 5 auteurs les plus productifs (par nombre de livres).
m) L’éditeur ayant publié plus de livres
n) Répartition des livres par catégorie.
NoSQL – Safa MAHOUACHI Page 2
~Bon travail~