Bases de Données Avancées. TD - TP - NoSQL - MongoDB
Bases de Données Avancées. TD - TP - NoSQL - MongoDB
Bases de Données Avancées. TD - TP - NoSQL - MongoDB
AZZOUZ
e. Requêtes:
Récupérer tous les produits.
Pour visualiser tous les documents de la
collection on utilise la fonction find().
db.produit.find()
e. Requêtes:
La fonction find() sans paramètre, elle
renvoie l’ensemble des documents. Mais
celle-ci peut aussi prendre deux paramètres :
Les critères de sélection des documents
(condition)
Les choix d’items des documents à
afficher(projection)
Ces deux paramètres doivent être écrits sous
la forme d’objets JSON.
Exercice 01
e. Requêtes:
Récupérer le premier produit.
db.produit.findOne()
ou bien db.produit.find()[0]
e. Requêtes:
Trouver l’id du Thinkpad X230 et faire la requête pour
récupérer ce produit avec son id.
db.produit.find(
{ "nom": "Thinkpad X230" }, Critères de sélection
e. Requêtes:
Récupérer les produits dont le prix est supérieur
à 13723 DA.
Pour les comparaisons, nous disposons des
opérateurs $eq(equal), $gt (greater than), $gte
(greater than or equal), $lt (less than), $lte (less
than or equal) et $ne (not equal).
-db.produit.find(
{"prix": {$gt: 13723}},
{"_id":0})
En plus de ces comparaisons simples, nous
disposons d’opérateurs de comparaisons à une
liste : $in (présent dans la liste) et $nin (non
présent dans la liste).
Exercice 01
e. Requêtes:
Récupérer le premier produit ayant le champ
ultrabook à true.
Pour limiter le nombre de documents renvoyés
par la fonction find() en lui ajoutant la fonction
limit(), comme ici où nous nous restreignons au
premier résultat.
-db.produit.find(
{"ultrabook" : true},
{"nom":1, "_id":0}
).limit(1)
Exercice 01
e. Requêtes:
Une autre opération classique est le tri des
résultats, réalisable avec la fonction sort(). On
doit indiquer les items de tri et leur attribuer
une valeur de 1 pour un tri ascendant et une
valeur de -1 pour un tri descendant. On affiche
ici les produits dans l’ordre croissant de leur
prix.
db.produit.find().sort({ "prix" : 1 })
Idem que précédemment, mais dans l’ordre
décroissant
db.produit.find().sort({ "prix" : -1 })
Exercice 01
e. Requêtes:
Utilisation des expressions régulières
Récupérer le premier produit dont le nom
contient Macbook.
db.produit.find({"nom": /Macbook/}).limit(1)
Récupérer les produits dont le nom
commence par Macbook
db.produit.find({"nom":/^Macbook/},
{"_id":0, "nom":1, "prix":1}
).sort({ "nom" : 1 })
Récupérer les produits dont le nom se
termine par Macbook: db.produit.find({"nom":
/Macbook$/}).limit(1)
Exercice 01
e. Requêtes:
Supprimer les deux produits dont le fabricant est
Apple
-db.produit.remove({"fabriquant": "Apple"})
Supprimer le Thinkpad X230 en utilisant
uniquement son id
db.produit.find({"nom":"Thinkpad X230"},
{"_id":1, "nom":1})
Résultat:
{ "_id" : ObjectId("5ea74afa390a5ba392b3c7fd"),
"nom" : "Thinkpad X230"}
db.produit.remove({"_id":
ObjectId("5ea74afa390a5ba392b3c7fd")})
Exercice 02
Collection gymnases:
Exercice 02
Collection Sportifs:
Exercice 02
db.Sportifs.find(
Si l’on cherche à tester
{
la présence ou non
"Sports" : { "$exists" : false }
d’un item, on utilise
}, l’opérateur $exists
{ (avec true si on teste la
"_id": 0, présence, et false
"Nom": 1 l’absence).
}
)
Exercice 02
db.Gymnases.find(
{"Seances.Jour": { "$nin" : [ "dimanche", "Dimanche" ]}
},
{ "_id": 0,
"NomGymnase": 1,
"Ville": 1,
"Seances.Jour": 1
}
)
Exercice 02
h. Quels gymnases ne proposent que des séances de
basket ball ou de volley ball ?
il existe des opérateurs logiques : $and, $or et $nor. Ces
trois opérations prennent un tableau de critères comme
valeur.
db.Gymnases.find(
{
"$nor": [
{ "Seances.Libelle": { "$ne": "Basket ball" }},
{ "Seances.Libelle": { "$ne": "Volley ball" }} ]
},
{ $nor effectue une opération logique NOR
"_id": 0, sur un tableau d'une ou plusieurs
"NomGymnase": 1, expressions de requête et sélectionne les
"Ville": 1, documents qui échouent à toutes les
"Seances.Libelle": 1 expressions de requête du tableau.
})
Exercice 02
db.Sportifs.find(
{
"Sports.Jouer" : { "$exists" : true },
"Sports.Entrainer" : { "$exists" : true }
},
{
"_id": 0,
"Nom": 1
}
)
Exercice 02
db.Sportifs.find(
{"IdSportif":{"$in":
db.Sportifs.distinct("IdSportifConseiller")}
},
Pour récupérer la liste
{
de tous les conseillers
"_id": 0,
"Nom": 1
}
)
Exercice 02
db.Sportifs.find(
{$and: [
{ "Sports.Entrainer": "Hand ball" },
{ "Sports.Entrainer": "Basket ball" }
]
},
{ "_id": 0,
"Nom": 1,
"Sports.Entrainer": 1
}
)
Exercice 02
m. Quels sont les couples de sportifs (identifiant et
nom et prénom de chaque) de même age ?
Var sportifs1=db.Sportifs.find({},
{"_id":0, "IdSportif":1,"Nom":1,"Prenom":1,"Age":1 }
).toArray();
var sportifs2 =sportifs1;
for(var i = 0; i < sportifs1.length; i++){
for(var j = 0; j < sportifs2.length; j++)
{ if(sportifs1[i].IdSportif<sportifs2[j].IdSportif)
{ if(sportifs1[i].Age==sportifs2[j].Age)
{printjson('( '+sportifs1[i].IdSportif +’ '+ sportifs1[i].Nom+'
'+sportifs1[i].Prenom+ ' , '+ sportifs2[j].IdSportif + '
'+sportifs2[j].Nom+' '+sportifs2[j].Prenom+' )'); }}}}
Exercice 02
db.Sportifs.aggregate([
db.Sportifs.aggregate([
{ $unwind: "$Sports.Arbitrer"},