École Marocaine des Sciences de l'Ingénieur - Casablanca
4éme année informatique et Réseaux
Bases de Données NoSQL
et
Big Data
Pr. I Salhi
int.salhi94@[Link]
Chapitre 2:
Bases de données orientées documents
(MongoDB)
Plan du cours
1. Généralité sur la BD MongoDB
2. Mise en Place & Installation
3. Interrogation de la BD :
1) Opérations de base sur le shell
2) Opérations avancées sur le shell
3
Généralité sur MongoDB
4
Généralité sur MongoDB
MongoDB : Généralité
– Système de gestion de base de données NoSQL orientée documents
crée en 2007 (SGBD NoSQL le plus populaire).
– Disponibilité de plusieurs fonctionnalités SQL dans le langage de
requête de MongoDB (count, group by, order by, sum...)
– Enregistre toutes nos données, saisies sous format JSON, dans le
format binaire BSON et retourne des résultats sous format JSON.
MongoDB offre aux utilisateurs la facilité d'utilisation et la
flexibilité des documents JSON ainsi que la vitesse et la richesse
d'un format binaire.
5
Généralité sur MongoDB
MongoDB : Généralité
Voici comment se présente une collection.
– Chaque document possède un id
attribué par l’utilisateur ou par MongoDB
(ObjectId).
– Sur chaque document, les éléments
peuvent être ajoutés et modifiés selon nos
besoins, sauf le champ _id.
– Une collection peut avoir d'autres
documents dont les structures se diffèrent
les unes des autres.
6
Généralité sur MongoDB
– Une collection est l’équivalent d’une table en SQL.
– Un document est l’équivalent d’un tuple en SQL.
– Les types de données sous MongoDB:
▪ Number
▪ Boolean
▪ String
▪ Array
▪ Object
▪ Date
7
Mise en Place d’une BD
MongoDB
8
Installation de MongoDB
Installation & Connexion à MongoDB
➢ Etape 1: Installation de Java
MongoDB nécessite l’installation du Java => Il faut installer le
JDK. La dernière version est JDK 1.8 (Téléchargeable via le lien
ci-dessous).
[Link]
[Link]
NB: Choisissez votre configuration et Accepter la
licence pour télécharger le fichier d’installation.
9
Installation de MongoDB
Installation & Connexion à MongoDB
➢ Etape 2: Téléchargement & Installation de MongoDB
– Télécharger le msi de MongoDB à partir du lien ci-dessous:
[Link]
– Après avoir terminer l’installation, ajouter le chemin du bin
de MongoDB au variable d’environnement Path pour le
lancer directement dans l’invite de commande:
Exemple:
C:\Program Files\MongoDB\Server\4.2\bin
10
Installation de MongoDB
Installation & Connexion à MongoDB
➢ Etape 3: (Juste pour les anciennes versions de MongoDB)
– Ajouter le répertoire C:/data/db qui va recevoir les
bases de données créer par l’utilisateur.
– Pour les nouvelles versions, ce répertoire se crée
automatiquement lors de l’installation de la BD:
(C:\Program Files\MongoDB\Server\4.2\data)
11
Installation de MongoDB
Installation & Connexion à MongoDB
➢ Etape 4: Lancement de MongoDB
– Pour lancer MongoDB, exécutez le fichier [Link]
→ Ceci lance le processus de la base de données
MongoDB.
– mongod est le processus primaire pour le système
MongoDB. Il traite les requêtes sur les données, gère l'accès
aux données, et effectue des opérations de traitement en
arrière-plan.
12
Installation de MongoDB
Installation & Connexion à MongoDB
➢ Etape 4: Lancement de MongoDB
13
Installation de MongoDB
Installation & Connexion à MongoDB
➢ Etape 4: Lancement de MongoDB
Le message «
waiting for
connections » sur
l'invite de
commandes indique
que le processus
[Link] a bien
été exécuté.
14
Installation de MongoDB
Installation & Connexion à MongoDB
➢ Etape 5: Connexion à MongoDB
– Pour se connecter à MongoDB, ouvrez une autre fenêtre
d'invite de commandes et tapez la commande mongosh.
– La connexion ne peut réussir que si le service MongoDB
est lancé.
– Par défaut, mongo recherche un serveur de base de
données sur le port 27017 sur l'interface locale.
15
Installation de MongoDB
MongoDB est
prêt pour être
utiliser
16
Interface Graphique de
MongoDB
17
Interface Graphique de MongoDB
MongoDB GUI : Exemples
– MongoDB Compass
– Robo 3T
– Studio 3T
– Mongo Booster
– …
18
Interface Graphique de MongoDB
MongoDB GUI : MongoDB Compass
Bases de Données NoSQL & Calcul Distribués 19
Interface Graphique de MongoDB
Robo 3T : Généralité
– Robo 3T (anciennement Robomongo) est une interface
utilisateur de bureau très populaire pour vos déploiements
d'hébergement MongoDB.
– Permet d'interagir avec les données par le biais d'indicateurs
visuels plutôt que d'une interface textuelle.
– Cet outil open source prend en charge plusieurs plates-formes
et intègre en réalité le shell mongo dans son interface afin de
fournir une interaction à la fois avec le shell et l'interface
graphique.
20
Interface Graphique de MongoDB
Robo 3T : Généralité
21
Interface Graphique de MongoDB
Robo 3T est téléchargeable via le lien suivant: [Link]
Remarque:
Tout d'abord, On
doit démarrer le
serveur avec la
commande mongod,
et par la suite on
lance Robo 3T.
22
Interface Graphique de MongoDB
Robo 3T : Création d’une nouvelle connexion
(1)
(2)
(3)
(4)
23
Interface Graphique de MongoDB
Robo 3T : Création d’une nouvelle connexion
24
Opérations de Base
sur le Shell
25
Opération de Base sur le Shell
Commandes de Base
– mongod : démarrer le serveur
– mongosh : démarrer une connexion client (démarrer le
shell javascript)
– mongo nom_de_la_BD : se connecter avec le nom de la
base de données voulue.
– db : Pour avoir le nom de la base de données courante.
– show dbs : Pour avoir la liste des bases de données.
26
Opération de Base sur le Shell
Création & Suppression d’une BD
– Création :
use nom_de_la_BD : si la base de données existe, on y
accède directement. Dans le cas contraire, elle sera créée
avant qu'on y accède.
– Suppression :
[Link]()
27
Opération de Base sur le Shell
Opérations sur les Collections
– Création d’une collection :
▪ Méthode 1: Directement
[Link](’nom_collection’)
▪ Méthode 2: En insérant un document
db.nom_collection.insert({clé1:"val1", clé2: "val2" , …})
– Lister les collections existantes : show collections
– Suppression d’une collection : db.nom_Collection.drop()
(Retourne true ou false selon le résultat)
28
Opération de Base sur le Shell
Opérations sur les Documents
1. L’ajout d’un document
▪ Méthode 1:
db.nom_collection.insert({clé1:"val1", clé2: "val2" , …})
▪ Méthode 2:
var nom_variable = ({clé1 :’val1’, clé2: ’val2’ , ...})
db.nom_Collection.save(nom_variable)
save : ajoute l’élément s’il n’existe pas, sinon elle le modifie
en écrasant le contenu précédent.
29
Opération de Base sur le Shell
Opérations sur les Documents
1. L’ajout d’un document (suite)
▪ Pour vérifier que l’ajout à eu lieu
db.nom_Collection.find()
▪ Pour faire plusieurs insertions en même temps
db.nom_Collection.insert( [
{clé1:’val1’, clé2:’val2’, ...},
...,
{cléN:’valN’, cléM:’valM’, ...}
])
30
Opération de Base sur le Shell
Opérations sur les Documents
2. La suppression d’un document
▪ Méthode 1: avec remove
La méthode remove() s'utilise en précisant des paramètres de
la manière suivante :
db.nom_collection.remove({clé:"valeur"})
31
Opération de Base sur le Shell
Opérations sur les Documents
2. La suppression d’un document
▪ Méthode 2: avec delete
– db.nom_collection.deleteMany({}): Supprime tous les
documents de la collection.
– db.nom_collection.deleteMany({<field1>: <value1>, ... }):
supprime les documents ayant les spécifications précisées dans le
filtre.
Remarque: deleteOne() Supprime un seul document
Bases de Données NoSQL & Calcul Distribués 32
Opération de Base sur le Shell
Opérations sur les Documents
3. La sélection d’un document
▪ Récupérer tous les documents d’une collection
db.nom_Collection.find()
▪ Rechercher selon des critères
db.nom_Collection.find({clé: "valeur", ... })
4. Compter le nombre de documents
db.nom_Collection.find({clé: "valeur" ... }).count()
32
Opération de Base sur le Shell
Opérations sur les Documents
5. Opérations sur l’affichage de documents
▪ Trier le résultat de recherche dans l’ordre croissant
db.nom_Collection.find().sort({clé: 1})
▪ Trier le résultat de recherche dans l’ordre décroissant
db.nom_Collection.find().sort({clé: -1})
▪ Sauter quelques documents (ne pas les afficher)
db.nom_Collection.find().skip(nbr_de_doc_à_masqués)
▪ Limiter le nombre de documents à afficher
db.nom_Collection.find().limit(nbr_de_doc_à_affichés)
34
Opération de Base sur le Shell
Opérations sur les Documents
5. Opérations sur l’affichage de documents (suite)
▪ Afficher seulement le premier document
db.nom_Collection.findOne()
▪ Afficher le résultat au format JSON
db.nom_Collection.find().pretty()
35
Opération de Base sur le Shell
Opérations sur les Documents
5. Opérations sur l’affichage de documents (suite)
Remarque :
La fonction find opère sur 2 paramètres :
o Paramètre 1 : Filtre de sélection
o Paramètre 2 : Lister les attributs à affichés dans le
résultat.
36
Opération de Base sur le Shell
Opérations sur les Documents
5. Opérations sur l’affichage de documents (suite)
▪ Afficher seulement quelques champs
[Link]({},{nom:1})
(ça affiche le nom de tous les personnes ainsi que leurs
identifiants)
▪ Et si on ne veut pas afficher les ids
[Link]({},{nom:1, _id:0})
37
Opération de Base sur le Shell
Opérations sur les Documents
6. Mettre à jour un document
Quelle commande pour faire la modification ?
db.nom_Collection.update()
Elle prend au moins deux paramètres :
– 1er paramètre : document(s) concernés par la modification,
– 2ème paramètre : le type de modification
38
Opération de Base sur le Shell
Opérations sur les Documents
6. Mettre à jour un document (suite)
Qu’est ce qu’on peut faire comme modification?
– $set : pour modifier la valeur d’un champ. Si le champ existe, il est
mis à jour. Sinon, il est ajouté au document.
– $unset : pour supprimer un champ.
– $inc : pour incrémenter la valeur d’un champ.
– $mul : pour multiplier l’ancienne valeur d’un champ par la valeur
spécifiée.
– $rename : pour renommer un champ.
– …
39
Opération de Base sur le Shell
Opérations sur les Documents
5. Mettre à jour un document (suite)
▪ Modification d’un document
db.nom_Collection.update({clé1 : ’val1’, ... },
{$set: {cléN : ’valN’ } })
Il existe d’autres méthodes de mise-à-jour:
– updateOne() : pour modifier le premier enregistrement de la
sélection (par défaut)
– updateMany() : pour modifier toute la sélection
40
Opération de Base sur le Shell
Opérations sur les Documents
5. Mettre à jour un document (suite)
▪ Modification d’un document (suite)
Exemple
[Link]({prenom: "Jean"},{$set:{ville:’Nantes’}})
– On commence par sélectionner les documents dont le champ prenom
contient comme valeur Jean.
– Pour ce document, on mettra la valeur Nantes pour le champ ville s’il
existe. Sinon, le champ ville sera créé avec la valeur Nantes.
41
Opération de Base sur le Shell
Opérations sur les Documents
5. Mettre à jour un document (suite)
▪ Modification d’un document (suite)
– Dans l’exemple précédent, seul le premier document de la collection
personne sera concerné par la modification.
– Pour que la fonction update() modifie plusieurs documents, il faut
ajouter l’option ‘multi’:
Exemple:
[Link]({prenom:"Jean"},{$set:{ville:’Nantes’},
{multi:true}})
42
Opération de Base sur le Shell
Opérations sur les Documents
5. Mettre à jour un document (suite)
▪ Supprimer un champ d’un document
[Link]({prenom: "Jean"},{$unset:{prenom:1}})
– On commence par sélectionner les documents dont le champ
prenom contient comme valeur Jean.
– Pour ce(s) document(s), on supprimera le champ prénom
s’il existe.
42
Opération de Base sur le Shell
Opérations sur les Documents
5. Mettre à jour un document (suite)
▪ Incrémenter un champ d’un document
[Link]({prenom: "Jean"},{$inc:{age:10}})
– On commence par sélectionner les documents dont le champ
prenom contient comme valeur Jean.
– Pour ce(s) document(s), on incrémentera de 10 l’age s’il existe.
Sinon, le champ age sera créé avec la valeur 10.
44
Opération de Base sur le Shell
Opérations sur les Documents
5. Mettre à jour un document (suite)
▪ Renommer un champ d’un document
[Link]({},{$rename:{nom: "name" } })
– On commence par sélectionner tous les documents.
– Pour ces documents, le champ nom sera renommé name.
45
Opération de Base sur le Shell
Opérations sur les Documents
6. Opérations sur un champ de type tableau
▪ Liste des opérations:
– $push : permet d'ajouter des éléments à la fin d'un tableau si
ce dernier existe et dans le cas contraire, il le crée.
– $each: permet d'ajouter des informations de façon consécutive
pour un champ donné. Mais il s'utilise avec l'opérateur $push.
– $pop : pour supprimer le premier ou le dernier élément d’un
tableau
– $pull : pour supprimer une ou plusieurs valeurs d’un tableau
46
Opération de Base sur le Shell
Opérations sur les Documents
6. Opérations sur un champ de type tableau(suite)
▪ Liste des opérations: (suite)
– $pullAll : pour supprimer tous les éléments d’un tableau
– $position : à utiliser avec push pour indiquer la position d’insertion
dans un tableau.
– $slice : à utiliser avec $push pour préciser les éléments à garder
dans un tableau (si le nbr est négatif ie on garde juste les derniers
éléments du tableau et inversement)
– $sort : à utiliser avec push pour ordonner les éléments d’un tableau.
47
Opération de Base sur le Shell
Opérations sur les Documents
6. Opérations sur un champ de type tableau (suite)
Considérons le document suivant :
[Link]({
_id : 5,
prenom : ’Jean’,
sport: [ ’foot’, ’hand’, ’tennis’] })
48
Opération de Base sur le Shell
Opérations sur les Documents
6. Opérations sur un champ tableau(suite)
▪ Ajouter un nouveau sport au tableau
[Link]({_id: 5}, { $push: {"sport": "basket"}})
▪ Ajouter plusieurs sports avec une seule requête
[Link] ({_id: 5}, {$push: {
"sport": { $each: [’basket’,’sky’] }}})
$push : ajoute naturellement l’élément après le dernier
Élément du tableau
49
Opération de Base sur le Shell
Opérations sur les Documents
6. Opérations sur un champ de type tableau (suite)
▪ Ajouter un élément à une position précise dans le tableau
[Link] ({_id: 5}, { $push: {
"sport": { $each: [’volley’], $position: 1 }}})
– Ceci rajoute l’élément volley à la position 2 du tableau sport (la
première position est d’indice 0)
– Les autres éléments seront décalés
50
Opération de Base sur le Shell
Opérations sur les Documents
6. Opérations sur un champ de type tableau (suite)
▪ Supprimer le premier élément d’un tableau
[Link]( {_id: 5}, {$pop: { sport: -1 }})
▪ Supprimer le dernier élément d’un tableau
[Link]( {_id: 5}, {$pop: { sport:1 }})
▪ Supprimer un élément quelconque d’un tableau
[Link]({_id: 5}, {$pull: {"sport": "foot"}})
=> supprime l’élément foot du tableau sport.
51
Opération de Base sur le Shell
Opérations sur les Documents
6. Opérations sur un champ de type tableau (suite)
▪ Préciser les éléments à garder dans un tableau (suite)
[Link]( { _id: 5 }, {
$push: { sport: {
$each: [’sky’, ’volley’ , ’hockey’],
$slice: -5 }
}
}) => Le résultat est : hand, tenis, sky, volley, hockey
52
Opération de Base sur le Shell
Opérations sur les Documents
7. Opérations sur un champ de type ‘tableau de document ’
Considérons le document suivant :
[Link]({
_id : 10,
prenom : ’Sara’,
notes : [ {’BD NoSQL’: 17, ’coefficient’: 4},
{‘Android’: 12, ’coefficient’: 2} ]
})
53
Opération de Base sur le Shell
Opérations sur les Documents
7. Opérations sur un champ de type ‘tableau de document ’ (suite)
▪ Ajouter un nouveau document au tableau
[Link]( { _id: 10 },
{ $push:
{ notes : {’compilation’: 15, ’coefficient’: 1} }
}
)
54
Opération de Base sur le Shell
Opérations sur les Documents
7. Opérations sur un champ de type ‘tableau de document ’ (suite)
▪ Supprimer un document du tableau
[Link]( { _id: 10 },
{ $pull:
{ notes : {’compilation’: 15, ’coefficient’: 1} }
}
)
55
Opération de Base sur le Shell
Opérations sur les Documents
7. Opérations sur un champ de type ‘tableau de document ’ (suite)
▪ Chercher un document selon une valeur dans son tableau
d’objet
[Link](
{ "[Link]" : {$ne:17} }
)
$ne = not equal = différent de
56
Opération de Base sur le Shell
Opérateurs de Logique/Comparaison
Comme pour les bases de données relationnelles, la
base de données NoSQL MongoDB est constitué aussi
d’opérateurs de:
– Comparaison
– Logiques
57
Opération de Base sur le Shell
Opérateurs de Logique/Comparaison
1. Les opérateurs de comparaison
– $gt : greater than (supérieur à)
– $gte : greater than or equal (supérieur ou égal)
– $lt : less than (inférieur à)
– $lte : less than or equal (inférieur ou égal)
– $eq : equal (égal à)
– $ne : not equal (différent de )
– $in : dans (un tableau...)
– $nin : not in (pas dans)
58
Opération de Base sur le Shell
Opérateurs de Logique/Comparaison
2. Les opérateurs logiques
– $and : ET
– $or : OU
– $not : le NON logique
– $nor : OU exclusif
– $exists : tester l’existance d’un champs. Elle
peut prendre deux valeurs: true ou false.
59
Opération de Base sur le Shell
Opérateurs de Logique/Comparaison
1. Les opérateurs de comparaison
Exemple 1: sélectionner les personnes âgés de plus de 20 ans
[Link]({"age":{ $gt:20 }})
Exemple 2: sélectionner les personnes dont l’ âge est entre 20
et 30 ans
[Link](
{$and:
[ { age:{$gte:20}},{ age:{$lte:30}} ]
})
60
Opération de Base sur le Shell
Opérateurs de Logique/Comparaison
2. Les opérateurs logiques
Exemple 1: Afficher les personnes dont le champ name existe
[Link]({ name:{$exists:true} } )
Exemple 2: Afficher les personnes dont l’age est divisible par 5
[Link]( { age:{ $mod: [ 5, 0 ] }} )
61
Opérations Avancées
sur le Shell
62
Opérations Avancées sur le Shell
Expressions régulières
On peut utiliser les expressions régulière dans une requête MQL.
▪ chercher les personnes dont le nom commence par w :
[Link]({name: /^w/ })
Explication:
– les deux / pour indiquer le début et la fin de l’expression
régulière.
– ^ pour indiquer par quoi commence le mot cherché.
63
Opérations Avancées sur le Shell
Expressions régulières
▪ chercher les personnes dont le nom se termine par k :
[Link]({name:/k$/})
▪ chercher les personnes dont le nom commence par a ou
par n :
[Link]({name:/^[an]/})
▪ chercher les personnes dont le nom commence par une
lettre comprise entre a et n:
[Link]({name:/^[a-n]/})
64
Opérations Avancées sur le Shell
Expressions régulières: Autres symboles utilisés
➢ x? : pour indiquer que la lettre x est facultative. Elle peut y être
0 ou 1 fois.
➢ x+ : pour indiquer que la lettre x est obligatoire. Elle peut y être
1 ou plusieurs fois.
➢ x* : pour indiquer que la lettre x est facultative. Elle peut y être
0, 1 ou plusieurs fois.
➢ x{2,4} : pour indiquer que la lettre x doit se répéter au moins
deux fois et au plus 4 fois.
➢ . : un caractère quelconque
➢ | : le ou logique
65
Opérations Avancées sur le Shell
Expressions régulières: Autres symboles utilisés
66
Opérations Avancées sur le Shell
Les agrégations
➢ L’opérations d' agrégations traitent les enregistrements
de données et renvoient les résultats calculés.
➢ Les opérations d'agrégation regroupent les valeurs de
plusieurs documents et peuvent effectuer diverses
opérations sur les données groupées pour renvoyer un seul
résultat.
➢ Exemple : Group By, SUM, MIN, MAX, AVERAGE…
67
Opérations Avancées sur le Shell
Les agrégations
db.nom_collection.aggregate (pipeline)
Paramètre Détails
pipeline array (Une séquence d'opérations ou d'étapes
d'agrégation de données)
68
Opérations Avancées sur le Shell
Les agrégations : Exemples des pipelines
➢ $match: permet de filtrer ➢ $out : pour enregistrer le
les documents selon la résultat dans une nouvelle
condition spécifiée collection
➢ $project: pour sélectionner ➢ $sample: Permet de
les champs que l’on souhaite sélectionner aléatoirement un
conserver dans le résultat nombre de documents spécifiée
dans la requête
➢ $group : Permet de
regrouper des documents ➢ $unwind : Permet de
comme un GROUP BY en décomposer un tableau en autant
SQL de documents que d’élément.
69
Opérations Avancées sur le Shell
Les agrégations : Exemples
Considérons la collection suivante (étudiants) :
{"_id" : 1, "nom" : "wick", "notes": [10, 15, 12], "age" : 19 }
{"_id" : 2, "nom" : "bob", "notes": [18, 8, 12], "age" : 35 }
{"_id" : 3, "nom" : "wolf", "notes": [7, 6, 13], "age" : 25 }
{"_id" : 4, "nom" : "green", "notes": [18, 16, 9], "age" : 22 }
70
Opérations Avancées sur le Shell
Les agrégations : Exemples
Exemple 1: [Link]( [
{ $project :
{ _id: "$nom",
moyenne: {$avg: "$notes"}
}
} ]);
71
Opérations Avancées sur le Shell
Les agrégations : Exemples
Exemple 2: [Link](
[ {$project: { _id: "$nom",
moyenne: {$avg: "$notes"}
}
}, { $out : "moyennes" }
]);
▪ Vérifier la création de la collection moyennes:
show collections; et [Link]();
72
Opérations Avancées sur le Shell
Les agrégations : Exemples
Exemple 3: [Link]( [
{ $sample: { size: 3 } }
])
Le résultat :
Il choisit aléatoirement trois documents de la collection
73
Opérations Avancées sur le Shell
Les agrégations : Exemples
Exemple 4: [Link]([ { $unwind : "$notes" } ])
74
Opérations Avancées sur le Shell
Les agrégations : Exemples
Considérons la collection books suivante:
{ "_id" : 8751, "title" : "The Banquet", "author" :"Dante", "copies" : 2
}
{ "_id" : 8752, "title" : "Divine Comedy", "author":"Dante", "copies" :
1}
{ "_id" : 8645, "title":"Eclogues", "author":"Dante", "copies" : 2 }
{ "_id" : 7000, "title" : "The Odyssey", "author" : "Homer", "copies"
: 10 }
{ "_id" : 7020, "title" : "Iliad", "author" : "Homer", "copies" : 10 }
75
Opérations Avancées sur le Shell
Les agrégations : Exemples
[Link]( [
{ $match : { author : "Dante" } }
]);
76
Documentation Officielle
Documentation Officielle:
[Link]
77