TD Mongoshell
TD Mongoshell
TD Mongoshell
Romain Tavenard
1 Avant-propos
Lors de ce TD, vous allez utiliser l’interface Robo 3T pour vous connecter à
des bases de données MongoDB. Dans le cadre de ce TD, le serveur MongoDB
sera soit lancé dans une machine virtuelle sur votre poste, soit une instance
MongoDB Atlas (cf. Guide d’installation).
Pour connaître la liste des collections contenues dans une base de données, on
utilise la commande :
db.getCollectionInfos()
Enfin, pour connaître le nombre de documents dans une collection, la syntaxe à
utiliser est :
db.nomDeLaCollection.count()
2 Premières requêtes
Il existe en MongoDB deux types de requêtes simples, retournant respectivement
toutes les occurrences d’une collection ou la première :
db.nomDeLaCollection.find()
db.nomDeLaCollection.findOne()
1
4. Chargez la base de données test et affichez le contenu de chacune de ses
collections.
Nous allons maintenant changer de base de données de travail. Pour cela, basculez
sur une base appelée food (clic droit sur le nom de la base, puis “Open Shell”).
Si l’on souhaite fixer des contraintes sur les documents à retourner, il suffit de
passer en argument d’une de ces fonctions un document masque contenant les
valeurs souhaitées. Par exemple, la requête suivante retourne tous les documents
ayant un champ "x" dont la valeur est "y" :
db.nomDeLaCollection.find({"x": "y"})
Les résultats que vous avez obtenus jusqu’à présent sont assez indigestes, notam-
ment parce que toutes les clés sont retournées pour tous les documents. Il est
possible de limiter cela en spécifiant les clés à retourner comme second argument
de find(), ici la clé "z":
db.nomDeLaCollection.find({"x": "y"}, {"z": true})
7. Utilisez cette astuce pour n’afficher que les noms des boulangeries du
Bronx.
8. Affichez les nom et notes (mais pas les dates de naissance) des étudiants
prénommés Marc dans la base etudiants.
3 Opérateurs de comparaison
Pour effectuer des requêtes plus complexes, impliquant des opérateurs de compa-
raison, on utilisera la syntaxe suivante :
db.nomDeLaCollection.find({"x": {operateur: valeur}})
Il est à noter que le sous-document contenant l’opérateur peut en fait contenir
plusieurs opérateurs et ainsi ne seront retournés que les documents vérifiant
toutes les conditions.
Les opérateurs les plus classiques sont les suivants :
2
Opérateur logique Mot-clé MongoDB
> $gt
<= $lte
>= $gte
“est dans la liste” $in
“n’est pas dans la liste” $nin
Enfin, le mot-clé $exists permet de ne retourner que les documents dans lesquels
la clé spécifiée existe.
9. Affichez la liste des étudiants ayant au moins une note au-dessus de 10.
10. Que retourne la requête suivante ? Vérifiez votre intuition.
db.notes.find({"notes": {$gt: 12, $lte: 10}})
Lorsque l’on souhaite effectuer un test sur une date, on utilisera toujours des
opérateurs de comparaison. Toutefois, pour comparer les dates d’une base à des
dates de référence, il faudra :
— que les dates de la base soient bien codées au format date (ISODate en
MongoDB) ;
— que les dates de référence soient des variables au format date, déclarées à
l’aide d’une commande du type :
d1 = new Date("AAAA-MM-JJ")
13. Dans la base de données etudiants, affichez tous les étudiants nés après
le 1er Janvier 1995.
14. Même question en ne sélectionnant que les étudiantes.
15. Dans la base de données test, affichez la liste des posts en date du 26
Août 2015.
3
— "x" = 1
— "y" = "zzz"
De la même façon, l’opérateur $nor permet de ne retourner que les documents
ne vérifiant aucune des conditions spécifiées.
16. Affichez la liste des étudiants qui vérifient l’une des deux conditions
suivantes :
— de sexe féminin ;
— dont le prénom commence par la lettre "M"
Lorsque l’on travaille sur des listes, il peut être utile de tester leur longueur, ce
qui se fait avec le mot-clé $size :
db.nomDeLaCollection.find({"cleDeLaListe": {$size: 12}})
ne retournera ainsi que les documents pour lesquels la valeur associée à la clé
cleDeLaListe est une liste de taille 12.
17. En utilisant la base test, affichez la liste des posts n’ayant pas reçu de
commentaire.
18. En utilisant la base etudiants, affichez la liste des étudiants ayant obtenu
exactement deux notes.
19. Affichez la liste des étudiants ayant obtenu une ou deux notes.
20. Affichez la liste des étudiants ayant obtenu au moins deux notes.