0% ont trouvé ce document utile (0 vote)
40 vues4 pages

Ateliers MongoDB : Agrégation et Mise à Jour

L'atelier présente des opérations avancées sur MongoDB, incluant l'importation de données sur les restaurants de New York, des requêtes de recherche avancées, et des opérations d'agrégation. Les participants apprendront à effectuer des mises à jour, des insertions, et des suppressions de données, ainsi qu'à utiliser des fonctions comme 'aggregate' et 'distinct'. L'atelier couvre également des techniques de tri et de groupement pour analyser les données des restaurants.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
40 vues4 pages

Ateliers MongoDB : Agrégation et Mise à Jour

L'atelier présente des opérations avancées sur MongoDB, incluant l'importation de données sur les restaurants de New York, des requêtes de recherche avancées, et des opérations d'agrégation. Les participants apprendront à effectuer des mises à jour, des insertions, et des suppressions de données, ainsi qu'à utiliser des fonctions comme 'aggregate' et 'distinct'. L'atelier couvre également des techniques de tri et de groupement pour analyser les données des restaurants.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Ateliers Bases de Données Avancées L 3 DSI EAD Pr8

Atelier 2 :Agrégation & Mise à jour avec MongoDB

Importer les données


Nous allons maintenant importer un jeu de données déjà formaté à notre base de données. Un jeu de
données Open Data est disponible sur des restaurants de New York produits la mairie sur les résultats des
inspections. Pour l’importation :

1. Téléchargez le fichier suivant : [Link]


2. Décompresser l’archive
3. Nous allons créer une base de données “new_york” (paramètre --db) et une collection
“restaurants” (paramètre -c pour collection).
La base de données contient 25 357 restaurants .
Recherche avancée
1. Afficher les restaurants du quatrier ( field : borough ) à Manhattan.
2. Combien y-a-t-il de restaurants à Bronx?

3. Afficher parmi les restaurants Brooklyn et qui font de la cuisine italienne.

4. Ajouter à la recherche précédente les restaurants présents sur la 5° Avenue ( La clé "street" )

5. Chercher le mot "pizza" dans le nom du restaurant ? Pour cela, il faut utiliser les expressions régulières
avec "/xxx/i" (le i pour "Insensible à la casse" - majuscule/minuscule).

6. Afficher seulement le nom des restaurants.

7. Afficher les résultats des inspections des commissions d'hygiène (se trouve dans la valeur de la clé
"[Link]") ., pour le restaurant nommé Joe’S Pizza ,

8. Afficher les noms et scores des restaurants de Manhattan ayant un score inférieur à 10.
Vérifier dans ce résultat, qu’on trouve des scores supérieurs à 10 ! L'opération "[Link]" : {"$lt" :
10}, veut dire : Est-ce que la liste "grades" contient un score (au moins) avec une valeur inférieure à 10 ?

Modifier la recherche précédente pour n’avoir qu’un résultat de score égale ou inférieur à 10.

9. Chercher les restaurants qui ont un grade ‘C’ avec un score inférieur à 30.

Cette interrogation donne soit des grades qui sont égales à C ou des scores inférieurs à 30.

Modifier cette interrogation de façon à ce que les deux conditions soient vérifiées en même temps.

(Utiliser $elemMatch Syntaxe : { <field>: { $elemMatch: { <query1>, <query2>, ... } } }

10. Afficher les noms, quartiers et grades des restaurants dont la dernière inspection (la plus récente,
donc la première de la liste) a donné un grade ‘C’.

Il faut donc chercher dans le premier élément de la liste. Pour cela il est possible de rajouter l’indice
recherché (indice 0) dans la clé. ([Link] : C)

Mme MSAKNI Imen Page 1


Ateliers Bases de Données Avancées L 3 DSI EAD Pr8

Modifier la recherche précédente pour que le deuxième élément de la liste soit égale à C .

Distinct
Syntaxe : [Link](field, query, options)

11. Afficher les différents quartiers de New York . Pour cela, on peut utiliser la fonction "distinct()" avec
la clé recherchée pour avoir une liste de valeur .

12. Afficher les grades donnés par les inspecteurs.

13. Afficher les différents street du champ address , pour la cuisine américaine.

Créer une séquence d’opérations avec “aggregate”


La fonction "aggregate ()" permet de spécifier des chaînes d’opérations, appelées pipeline d’agrégation.

Cette fonction aggregate prend une liste d’opérateurs en paramètre. Il existe plusieurs types d’opérateurs
de manipulation de données les principaux sont :

{$match : {} } : C’est le plus simple, il correspond au premier paramètre de la requête find que. Il permet
donc de filtrer le contenu d’une collection.

{$project : {} } : C’est le second paramètre du find. Il donne le format de sortie des documents
(projection). Il peut par ailleurs être utilisé pour changer le format d’origine.

{$sort : {} } : Trier le résultat final sur les valeurs d’une clé choisi.

{$group : {} } : C’est l’opération d’agrégation. Il va permettre de grouper les documents par valeur, et
appliquer des fonctions d’agrégat. La sortie est une nouvelle collection avec les résultats de l’agrégation.

{$unwind : {} } : Cet opérateur prend une liste de valeur et produit pour chaque élément de la liste un
nouveau document en sortie avec cet élément. Il pourrait correspondre à une jointure, à ceci près que
celle-ci ne filtre pas les données d’origine, juste un complément qui est imbriqué dans le document. On
pourrait le comparer à une jointure externe avec imbrication et listes.

14. Afficher en utilisant aggregate, les noms et quartiers des restaurants dont la dernière inspection
([Link]) a donné un grade ‘C’.

Le même résultat est affiché grâce au code suivant :

[Link]( [ varMatch, varProject ] );

15. Afficher en utilisant aggregate, les noms et les grades des restaurants qui n’ont pas encore été
inspecté. (Not Yet Graded).

Tri
16. Modifier la recherche précédente en triant le résultat par nom de restaurants par ordre
croissant ensuite par ordre décroissant.

(Utiliser $sort { $sort: { <field1>: <sort order>, <field2>: <sort order> ... } })

Groupement simple
17. Compter le nombre de ces restaurants (premier rang ayant pour valeur C). Pour cela, il faut définir un
opérateur $group. Celui-ci doit contenir obligatoirement une clé de groupement (_id), puis une clé (total)
à laquelle on associe la fonction d'agrégation ($sum) .

Mme MSAKNI Imen Page 2


Ateliers Bases de Données Avancées L 3 DSI EAD Pr8

{ $group:{ _id: <expression>, // Group key

<field1>: { <accumulator1> : <expression1> },

... }

{ $sum: <expression> }

utiliser ensuitela fonction aggregate pour l’affichage.

Groupement par valeur


18. Modifier la recherche précédente en affichant par quartier le nombre de ces restaurants.

Unwind
19. Trouver le score moyen des restaurants par quartiers, et trier par score décroissant.

Pour cela, il faut grouper les valeurs par quartier ($borough), et utiliser donc la fonction d’agrégat "$avg"
pour la moyenne (average), puis trier sur la nouvelle clé produite "$moyenne". Un problème se pose
comment calculer la moyenne sur une "[Link]" qui est une liste ? Il faudrait au préalable retirer
chaque élément de la liste, puis faire la moyenne sur l’ensemble des valeurs. C’est
l’opérateur $unwind qui s’en charge, il suffit de lui donner la clé contenant la liste à désimbriquer.

(Indication $unwind : "$grades"})

Mettre à jour les données


Dans cette section, nous allons voir les opérations de mise à jour suivantes :

Update , delete, insert

InsertOne et insertMany
20. Insérer un nouveau restaurant de votre choix

Utiliser insertOne et insertMany pour insérer des restaurants

Vérifier les nouvelles insertions.

Que ce passe t-il si on insère un restaurant qui existe déjà ?

Update
21. Ajouter un commentaire sur un restaurant dont l’Id est donné en valeur (opérateur $set) :
Vérifier la modification.

Modifier la cuisine d’un restaurant de votre choix.

Vérifier la modification.

22. Pour supprimer une clé, il suffit de remplacer par l'opérateur $unset.

Supprimer le commentaire que vous venez d’insérer.

23. Pour ajouter un commentaire en fonction des grades obtenus. S'il n'a pas eu de note 'C', nous
rajouterons le commentaire 'acceptable'.

Vous allez remarquer qu’une seule modification a été effectuée

Mme MSAKNI Imen Page 3


Ateliers Bases de Données Avancées L 3 DSI EAD Pr8

modifiedCount: 1,

Le résultat est identique. Il n'y aurait qu'un seul restaurant sans note 'C' ? Faites la requête find
correspondante, vous verrez qu'il y en a plusieurs ! MongoDB interdit par défaut les modifications
multiples avec un filtre. Cette opération pourrait être lourde et ralentir le système. Pour cela, il faut
explicitement dire que les modifications peuvent être multiples :

Revérifier la valeur modifiedCount

Remove
24. Supprimer tous les restaurants qui ont une note de 0.

Supprimer ensuite les restaurants dont le nom est « Riviera Caterer ».

Mme MSAKNI Imen Page 4

Vous aimerez peut-être aussi