UNIVERSITE MOULAY ISMAIL
Ecole Nationale des arts et des métiers
Département : Mathématiques et Informatique
Base de données NoSQL
Dr. EL HLOULI FATIMA ZOHRA
[Link]@[Link]
Année universitaire 2024/2025
2 Plan du cours
1. Rappel général sur les bases de données
2. Introduction au NoSQL
3. Introduction au MongoDB
4. Opérateur CRUD en MongoDB
Base de données NoSQL
Chapitre 1
Rappel général sur les bases de données
3
Qu'est-ce qu'une base de données ?
4
Introduction
Une base de données est un ensemble de données stockées
de manière structurée permettant ainsi d’être utilisées par un
ou plusieurs programmes informatiques.
Les données doivent être consultables selon n’importe quel
critère.
Exemple: trouver les livres de sciences fiction écrit par
des auteurs de moins de 25 ans entre 1925 et 1930.
De plus la base de données doit permettre la mise à jour et la
consultation des données par plusieurs utilisateurs.
5
Systèmes de gestion de
bases de données
Un système de gestion de base de données (SGBD) est un
ensemble de programmes permettant à plusieurs
utilisateurs d’accéder à une base de données en leur
donnant l’illusion qu’ils sont les seuls à travailler sur ces
données.
Un SGBD doit permettre entre autres
la recherche,
la mise à jour,
l’insertion,
la suppression de données.
6
7 Les niveaux de données
8 Propriétés Clés d'un SGBD (1)
Indépendance physique : C'est la capacité de modifier le schéma physique (la
façon dont les données sont stockées) sans affecter le schéma logique (la façon
dont les données sont vues par les utilisateurs).
Indépendance logique : le SGBD interne peut être modifié sans remettre en
cause le niveau physique.
Manipulabilité : des personnes ne connaissant pas la base de données et la
manière dont elle est stockée en machine doivent pouvoir manipuler les données.
Rapidité des accès : le SGBD doit pouvoir répondre aux requêtes le plus
rapidement possible.
9 Propriétés des SGBD (2)
Limiter les redondances : le SGBD doit éviter aux maximums le stockage des informations
redondantes afin d’éviter des pertes en espace mémoire et aussi pour éviter des erreurs.
Vérification de l’intégrité : les données doivent être cohérentes entre elles. Par exemple, si
une donnée fait référence à une autre alors cette dernière doit être aussi présente dans la
base de données.
C’est le cas pour la bibliothèque : un emprunt fait toujours référence à un livre et ce
livre doit exister dans la base de données pour que celle-ci reste cohérente.
Partageabilité des données : le SGBD doit permettre l’accès simultané aux données par
plusieurs utilisateurs.
Sécurité des données : le SGBD doit présenter des mécanismes permettant de gérer les
droits d’accès aux données mais aussi d’assurer un bon fonctionnement après une panne.
Pour cela des mécanismes de sauvegardes doivent être mis en place.
Les types de bases de données (1)
Base de données hiérarchique
La base de données hiérarchique suit un ordre de classement ou
une relation parent-enfant pour structurer les données.
Base de données réseau
La base de données est similaire à une base de données
hiérarchique mais présente quelques modifications. La base de
données réseau connecte l'enregistrement enfant à divers
enregistrements parents, permettant ainsi des relations
bidirectionnelles.
Base de données orientée objet
Dans une base de données orientée objet, le système stocke les
informations à la manière d'un objet.
10
Les types de bases de données(2)
Base de données relationnelle
Une base de données relationnelle est orientée table, où
chaque bit de données est lié à tous les autres bits de
données.
Base de données non relationnelle ou NoSQL
Une base de données sans SQL utilise une variété de
formats, tels que des documents, des graphiques, des
colonnes larges, etc., ce qui offre une excellente flexibilité
et évolutivité à la conception d'une base de données.
11
12 Exemples de SGBD
Base de données NoSQL
Chapitre 2
Introduction au NoSQL
13
14 Limites de SGBD relationnel
Contexte:
Depuis les années 2000, un déluge de données considérable
De tels volumes ne sont plus gérables par des solutions traditionnelles
Problèmes des 3V
• Volume (Le volume des données augmente considérablement)
Difficulté d’intégration
• Vélocité (fréquence rapide de génération de données)
dans les SGBD existant
• Variété(Les données sont souvent de nature hétérogène)
15 Il faut trouver une solution
Un nouveau système permettant :
Une meilleure mise à l’échelle (scalabilité) dans des contextes fortement
distribués.
Permettre une gestion simplifiée et meilleure de données hétérogènes.
Création de systèmes complémentaires aux SGDBR adressant leurs limites sans
pour autant les remplacer.
16 Solutions propriétaires
A partir de là, les innovations s'enchaînent :
• En 2005, Google lance la base de données Google Bigtable,
• En 2007 Amazon lance Amazone DynamoDB,
17 Naissance du mouvement NoSQL
Le terme NoSQL a été créé par Johan Oskarsson en
2009 au cours d’une rencontre à San Fransisco.
Il cherchait un hashtag Twitter pour désigner les bases
de données comme Bigtable et Dynamo.
Johan Oskarsson
18 Caractéristiques des bases NoSQL(1)
Ce sont des bases de données Non-relationnelles
Open source pour la plupart
Souvent installées sur un cluster (grappe de serveurs)
Cluster
Acceptent les données de structures complexes ou
imbriquées
19 Caractéristiques des bases NoSQL(2)
Pas de schéma pour les données ou schéma dynamique.
Partitionnement horizontal des données (sharding) sur plusieurs noeuds (serveurs)
pour le traitement des données via des algorithmes « MapReduce ».
Réplication des données sur plusieurs nœuds.
20 Avantages des BD NoSQL
Évolutivité
Disponibilité
Tolérance aux pannes
21 Bases de données NoSQL
22 Familles des BDDs NoSQL
Stocker les informations de la façon la mieux adaptée à leur représentation :
• Clé-valeur / Key-value
• Colonne / Column
• Document
• Graphe / Graph
23 Clés-valeurs
Repose sur le couple clé-valeur.
Fonctionne comme une table de hachage.
Solution simple et efficace.
La valeur contient des données hétérogènes.
Donc pas de schéma, pas de structure.
24 Colonnes
Se focalise sur les attributs.
Evite le traitement des colonnes inutiles lors des requêtes.
Adaptée pour traitements de masse (stats, calculs analytiques, …).
Moins appropriée pour la lecture de données spécifiques.
25 Documents
Repose sur la notion de clé-valeur (également sur les champs)
Les valeurs sont structurées
Manipuler des informations avec données complexes (listes, imbrications, etc.)
Langages d’interrogation riches
26 Graphe
Basées sur les théories des graphes.
S’appuie sur les notions de noeuds, de relations et des propriétés qui leur sont rattachées.
Conçues pour les données dont les relations sont représentées comme graphes, et ayant
des éléments interconnectés, avec un nombre indéterminé de relations entre elles.
Adapté aux traitements des données des réseaux sociaux.
27 Principes du NoSQL
Les bases NoSQL relâchent certaines contraintes pour garantir les performances
Elles sont B.A.S.E
Basically Available : Le système garantie un taux de disponibilité de la donnée
Soft-state : La base n’est pas nécessairement cohérente à tout instant
Eventually consistent : La base atteindra, à terme, un état cohérent
28 Théorème de CAP
Théorème de CAP
"Dans toute base de données, vous ne pouvez respecter au plus que 2 propriétés
parmi la cohérence, la disponibilité et la distribution"
Base de données NoSQL
Chapitre 3
Introduction au MongoDB
29
30 MongoDB
Base de données NoSQL
Sortie en 2009
Orientée documents
Pas de schémas, pas de structure de table, pas de typage
Fournit un langage basé sur JavaScript
31 Vocabulaire(1)
Base de donnée :
• Conteneur physique pour les collections.
• Chaque base de données a ses propres fichiers sur le système de fichiers.
• Un serveur MongoDB typique gère plusieurs bases de données.
Exemple:
Articles
Auteurs
BlogDB Collections
Catégories
…
32 Vocabulaire(2)
Collection:
• Groupe de documents MongoDB.
• Équivalent d'une table SGBDR.
• Existe au sein d'une seule base de données.
• Collections n'appliquent pas de schéma rigide.
• Les documents d'une collection peuvent avoir des champs différents.
Exemple: Articles
Document 1
Document 2
Document 3
Document 4
La collection : Articles
33 Vocabulaire(2)
Document:
• Document : Ensemble de paires clé-valeur.
• Les documents ont un schéma dynamique.
• Schéma dynamique : Documents d'une collection peuvent avoir des ensembles de
champs différents.
• Les champs communs dans les documents d'une collection peuvent contenir différents
types de données.
• Exemple: Document 1 Exemple: Document 2
{
{ "_id": ObjectId("5fec3d11a2b4e06d1b6d9cf5"),
"_id": ObjectId("5fec3d11a2b4e06d1b6d9cf4"), "titre": "Création de collections MongoDB",
"titre": "Introduction à MongoDB", "auteur": "Jane Doe",
"auteur": "John Smith", "contenu": "Pour créer une collection dans MongoDB...",
"contenu": "MongoDB est une base de données NoSQL...", "date_publication": ISODate("2023-01-10T[Link]Z"),
"date_publication": ISODate("2023-01-05T[Link]Z") "image_de_couverture": "cover_image.jpg",
} "tags": ["MongoDB", "Base de données"]
}
fields
34 BSON /JSON MongoDB
MongoDB utilise le format BSON (Binary JSON) pour stocker les
données.
BSON : Acronyme pour Binary JSON. C'est un format de données
binaire utilisé par MongoDB.
JSON : Acronyme pour JavaScript Object Notation. C'est un format
de données texte populaire.
35
36 SQL /MongoDB
Base de données NoSQL
Chapitre 4
Les opérations CRUD sur Mongodb
37
38 CRUD
• Create (insérer de nouveaux documents dans la base de
données MongoDB)
• Read (interroger un document dans la base de données)
• Update(modifier des documents existants dans la base de
données)
• Delete(supprimer des documents de la base de données)
39 L’opération Create
MongoDB propose deux opérations de création différentes
que vous pouvez utiliser pour insérer des documents dans
une collection :
[Link]()
permet d'insérer un seul document dans la collection.
[Link]()
permet d’insérer plusieurs documents à la fois.
40
[Link]()
• syntaxe
[Link](
{ field1: value1, field2: value2, ... }
)
db : Référence à la base de données.
maCollection : Nom de la collection dans laquelle vous souhaitez insérer le document.
insertOne() : Méthode pour insérer un document unique.
{ field1: value1, field2: value2, ... } : Les champs et leurs valeurs que vous souhaitez insérer
dans le document
41
[Link]()
• Exemple
[Link](
{ nom: "Alice", age: 28, email: "alice@[Link]" }
)
un nouveau document est inséré dans la collection "maCollection" avec
les champs "nom", "age", et "email" et leurs valeurs respectives.
42 [Link]()
[Link](
[
• syntaxe { field1: value1, field2: value2, ... },
{ field1: value1, field2: value2, ... },
// Ajoutez d'autres documents ici
]
)
db : Référence à la base de données.
maCollection : Nom de la collection dans laquelle vous souhaitez insérer les documents.
insertMany() : Méthode pour insérer plusieurs documents en une seule opération.
[...] : Un tableau de documents à insérer. Chaque document est un objet BSON qui
contient les champs et leurs valeurs.
{ field1: value1, field2: value2, ... } : Les champs et leurs valeurs pour chaque document
que vous souhaitez insérer.
43
[Link]()
• Exemple
[Link]([
{ nom: "Alice", age: 28, email: "alice@[Link]" },
{ nom: "Bob", age: 32, email: "bob@[Link]" },
{ nom: "Charlie", age: 25, email:
"charlie@[Link]" }
])
Dans cet exemple, trois documents sont insérés dans la collection
"maCollection". Chaque document est spécifié comme un objet BSON
dans le tableau passé à insertMany().
44 L’opération Read
MongoDB dispose de deux méthodes pour lire les
documents d'une collection:
[Link]()
[Link]()
45 [Link]()
• syntaxe
[Link](
{ query },
{ projection }
)
db : Référence à la base de données.
maCollection : Nom de la collection à partir de laquelle vous souhaitez extraire des documents.
find() : Méthode pour rechercher des documents dans la collection.
{ query } : C'est un objet BSON qui spécifie les critères de recherche pour filtrer les documents.
{ projection } (facultatif) : C'est un objet JSON qui spécifie quels champs doivent être inclus ou
exclus dans les résultats de la recherche.
46 [Link]()
• Exemple
[Link](
{ age: { $gte: 25 } }, // Rechercher les personnes de 25 ans ou plus
{ nom: 1, age: 1 } // Afficher uniquement les champs "nom" et "age"
)
Dans cet exemple, find() recherche tous les documents dans la collection
"maCollection" où l'âge est supérieur ou égal à 25 ans. Les résultats n'incluront que
les champs "nom" et "age" en fonction de la projection spécifiée.
47 [Link]()
• syntaxe
[Link](
{ query },
{ projection }
)
db : Référence à la base de données.
maCollection : Nom de la collection dans laquelle vous souhaitez rechercher un document unique.
findOne() : Méthode pour rechercher un seul document qui correspond aux critères spécifiés.
{ query } : C'est un objet BSON qui spécifie les critères de recherche pour filtrer les documents. Vous
pouvez spécifier les champs et leurs valeurs pour trouver un document qui correspond à ces critères.
{ projection } (facultatif) : C'est un objet BSON qui spécifie quels champs doivent être inclus ou exclus
dans le résultat de la recherche.
48 [Link]()
• Exemple
[Link](
{ age: 30 }, // Rechercher une personne de 30 ans
{ nom: 1, age: 1 } // Afficher uniquement les champs "nom" et "age"
)
Dans cet exemple, findOne() recherche le premier document dans la collection
"maCollection" où l'âge est égal à 30 ans. Le résultat n'inclura que les champs "nom" et
"age" en fonction de la projection spécifiée.
49 L’opération Update
il existe trois méthodes différentes de mise à jour des
documents :
[Link]()
[Link]()
[Link]()
50 [Link]()
• syntaxe
[Link](
{ filter },
{ update }
)
db : Référence à la base de données.
maCollection : Nom de la collection dans laquelle vous souhaitez mettre à jour un document unique.
updateOne() : Méthode pour mettre à jour un seul document qui correspond aux critères spécifiés.
{ filter } : C'est un objet BSON qui spécifie les critères de recherche pour filtrer le document que vous
souhaitez mettre à jour.
{ update } : C'est un objet BSON qui spécifie comment mettre à jour le document trouvé. Vous pouvez
utiliser des opérateurs tels que $set, $inc, etc., pour modifier les champs du document.
51 [Link]()
• Exemple
[Link](
{ nom: "Alice" }, // Rechercher un document avec le champ "nom" égal
à "Alice"
{ $set: { age: 31 } } // Mettre à jour le champ "age" à 31
)
Dans cet exemple, updateOne() recherche le premier document dans la
collection "maCollection" où le champ "nom" est égal à "Alice" et met à jour
le champ "age" à 31.
52 [Link]()
• syntaxe
[Link](
{ filter },
{ update }
)
db : Référence à la base de données.
maCollection : Nom de la collection dans laquelle vous souhaitez mettre à jour plusieurs
documents.
updateMany() : Méthode pour mettre à jour plusieurs documents qui correspondent aux
critères spécifiés.
{ filter } : C'est un objet BSON qui spécifie les critères de recherche pour filtrer les documents
que vous souhaitez mettre à jour.
{ update } : C'est un objet BSON qui spécifie comment mettre à jour les documents trouvés.
53 [Link]()
• Exemple
[Link](
{ age: { $gte: 30 } }, // Rechercher les personnes de 30 ans ou plus
{ $set: { statut: "Terminé" } } // Mettre à jour le champ "statut" à
"Terminé"
)
Dans cet exemple, updateMany() recherche tous les documents dans la
collection "maCollection" où l'âge est supérieur ou égal à 30 ans et met à
jour le champ "statut" à "Terminé" pour ces documents.
54 [Link]()
[Link](
{ filter },
• syntaxe { replacement }
)
db : Référence à la base de données.
maCollection : Nom de la collection dans laquelle vous souhaitez remplacer un document
unique.
replaceOne() : Méthode pour remplacer un seul document qui correspond aux critères
spécifiés.
{ filter } : C'est un objet BSON qui spécifie les critères de recherche pour filtrer le document
que vous souhaitez remplacer.
{ replacement } : C'est un objet BSON qui spécifie le document de remplacement complet. Le
document spécifié ici sera utilisé pour remplacer le document trouvé. Assurez-vous que le
document de remplacement a la même structure que le document à remplacer.
55 [Link]()
[Link](
• Exemple { nom: "Alice" }, // Rechercher un document avec le champ "nom"
égal à "Alice"
{ nom: "Alicia", age: 29, email: "alicia@[Link]" } //
Remplacer le document avec ces nouvelles valeurs
)
Dans cet exemple, replaceOne() recherche le premier document dans la
collection "maCollection" où le champ "nom" est égal à "Alice" et le
remplace par un nouveau document spécifié dans { replacement }. Le
document de remplacement doit avoir la même structure que le document
d'origine.
56 L’opération Delete
MongoDB propose deux méthodes différentes pour supprimer
des enregistrements d'une collection :
[Link]()
[Link]()
57 [Link]()
[Link](
{ filter }
• Syntaxe )
db : Référence à la base de données.
maCollection : Nom de la collection dans laquelle vous souhaitez supprimer un document
unique.
deleteOne() : Méthode pour supprimer un seul document qui correspond aux critères
spécifiés.
{ filter } : C'est un objet BSON qui spécifie les critères de recherche pour filtrer le document
que vous souhaitez supprimer.
58 [Link]()
[Link](
• Exemple { nom: "Alice" } // Supprimer un document avec le
champ "nom" égal à "Alice"
)
Dans cet exemple, deleteOne() recherche le premier document dans la
collection "maCollection" où le champ "nom" est égal à "Alice" et le
supprime de la collection.
59 [Link]()
[Link](
{ filter }
• Syntaxe )
db : Référence à la base de données.
maCollection : Nom de la collection dans laquelle vous souhaitez supprimer plusieurs
documents.
deleteMany() : Méthode pour supprimer plusieurs documents qui correspondent aux critères
spécifiés.
{ filter } : C'est un objet BSON qui spécifie les critères de recherche pour filtrer les documents
que vous souhaitez supprimer.
60 [Link]()
[Link](
• Exemple { age: { $lt: 30 } } // Supprimer tous les documents où l'âge est
inférieur à 30
)
Dans cet exemple, deleteMany() recherche tous les documents dans la
collection "maCollection" où l'âge est inférieur à 30 et les supprime de
la collection.
61 Les opérateurs de comparaison
Les opérateurs de comparaison sont utilisés pour effectuer des requêtes
conditionnelles dans MongoDB.
1. $eq (Égal) Correspond aux documents où la valeur d'un champ est égale à une
valeur spécifiée.
2. $ne (Non Égal) Correspond aux documents où la valeur d'un champ n'est pas
égale à une valeur spécifiée.
3. $gt (Supérieur à) Correspond aux documents où la valeur d'un champ est
strictement supérieure à une valeur spécifiée.
4. $gte (Supérieur ou Égal à) Correspond aux documents où la valeur d'un champ est
supérieure ou égale à une valeur spécifiée.
62 Les opérateurs de comparaison
5. $lt (Inférieur à) Correspond aux documents où la valeur d'un champ est strictement
inférieure à une valeur spécifiée.
6. $lte (Inférieur ou Égal à) Correspond aux documents où la valeur d'un champ est
inférieure ou égale à une valeur spécifiée.
7. $in (Dans une liste) Correspond aux documents où la valeur d'un champ est
présente dans une liste de valeurs spécifiée.
8. $nin (Pas dans une liste) Correspond aux documents où la valeur d'un champ n'est
pas présente dans une liste de valeurs spécifiée.
Exemple : trouvera les documents où l'âge est compris entre 25 (inclus) et 30 (exclus).
[Link](
{ age: { $gte: 25, $lt: 30 } }
)