Matière : Les Base de données NoSQL AU : 2023-2024
Section : T-LSI ADBD
Enseignante responsable : Faiza GHOZZI,
TP2 : Les requêtes d’interrogations Simples (correction)
I. Interrogation de la collection Movies avec find() :
Donner les requêtes sur la collection Movies répondant aux requêtes suivantes :
1) Afficher le premier film de la collection Movies
db.getCollection("Movies").findOne({})
2) Afficher le titre et les genres des films dont le réalisateur Terry Gilliam ?
db.getCollection("Movies").find({directors:"Terry Gilliam"},{title:1,genres:1,_id:0})
3) Donner l’année d’apparition du film “Bootmen”.
db.getCollection("Movies").find({title:"Bootmen"},{year:1, title:1})
4) Quels sont les films réalisés par quelqu'un prénommé Terry avant 2000 ?
db.getCollection("Movies").find({directors:/Terry/,year:{$lt:2000}},{directors:
1,_id:0, year:1})
ou
db.getCollection("Movies").find({directors:{$regex:/Terry/},year:{$lt:2000}},{
directors:1,_id:0, year:1})
5) Donner le titre des films réalisé entre les années 1980 et 1990.
db.getCollection("Movies").find({year:{$gt:1980,$lt:1990}},{year:1,title:1})
6) Donner le titre des films réalisé dans les années 70 avec un tri alphabétique des
titres.
db.getCollection("Movies").find({$and:{[{ year :{$gte:1970}}], {year :{
[$lt:1980]}}},{title:1}).sort({title:1})
ou
db.getCollection("Movies").find({year:{$gte:1970,$lt:1980}},{title:1}).sort({ti
tle:1})
7) Donner le titre des films du genre children et comedy (attention à la casse)
db.getCollection("Movies").find({genres:{$regex:'^children.*comedy',
$options:'i'}},{title:1, genres:1})// commence par children
ou
db.getCollection("Movies").find({genres:{$regex:'.*children.*comedy',
$options:'i'}},{title:1, genres:1})// contient children
8) Donner le titre des films du genre “crime” ou “drama”.
db.getCollection("Movies").find({genres:{$in:[/^crime/i,/^drama/i]}},{title:1,
genres:1})
9) Donner les films dont le Nom (Last_Name) du deuxième acteur est "Allen" et le
directeur de ce film commence par la lettre ‘J’
db.getCollection("Movies").find({directors:/^J/,"actors.Last_Name":/Allen/},{directors
:1, title:1, actors:1})
10) Le titre des films dont “ Morgan Freeman“ est l’un des acteurs.
db.getCollection("Movies").find({"actors.First_Name":"Morgan","actors.Last_
Name":"Freeman"},{title:1,"actors.First_Name":1,"actors.Last_Name":1})
11) Donner les films qui ont 2 acteurs seulement.
db.getCollection("Movies").find({"actors":{"$size":2}},{actors:1}) //ajouter
atres films
12) Donner les films qui ont au moins 2 réalisateurs.
db.getCollection("Movies").find({"directors.2":{"$exists":true}},{directors:1,
title:1})
13) Donner les films qui ont comme acteur “Brad Pitt “ (utiliser $elemMatch)
db.getCollection("Movies").find({"actors":{$elemMatch:{First_Name:"Brad",
Last_Name:"Pitt"}}},{actors:1, title:1}) // il existe au moins une seule fois
14) Donner les films qui ont comme premier acteur “Brad Pitt “
db.getCollection("Movies").find({"actors.0.First_Name":"Brad","actors.0.Last
_Name":"Pitt"},{actors:1, title:1}) // forcer l'index
II. Interrogation de la collection Utilisateurs avec find() :
1) Combien d’utilisateurs ont entre 30 et 35 ans?
db.getCollection("Utilisateurs").find({age:{$gte:30,$lte:35}},{name:1,age:1}).coun
t()
2) Quels sont les trois derniers films notés par Ryan Leland?
db.getCollection("Utilisateurs").find({name:"Ryan Leland"},{"movies":{$slice:-3}})
Le $slice avec une valeur négative indique à MongoDB de compter à partir de la fin
du tableau.
3) Afficher les hommes dont leurs notes est supérieur à 4
db.getCollection("Utilisateurs").find({$and :[{"movies.rating":{$gt:4}},{gender : "M"}]},
{gender:1,"movies.rating":1}) // au moins
4) Afficher que les notes entre 4 et 5 Attribuée par des femmes ?
db.getCollection("Utilisateurs").find({$nor
:[{"movies.rating":{$gt:5}},{"movies.rating":{$lt:3}},{"movies.rating":{$exists:false}},{gen
der:"M"}],},{gender:1,"movies.rating":1,"movies.movieid":1})
5) Combien d’utilisateurs ont noté tous les films de Superman (id 2640, 2641, 2642,
2643) ?
db.getCollection("Utilisateurs").find({"movies.movieid":{$all:[2640,2641,2642,2643]}},{na
me:1,"movies.movieid":1, gender:1}).count()
6) Combien d’utilisateurs ont notés exactement 48 films ?
db.getCollection("Utilisateurs").find({"movies":{$size:48}},{name:1,"movies.rating":1})