Vous êtes sur la page 1sur 19

Université MAPON

KINDU - RD.CONGO

Analyse et conception de système d’information

Master 1 Informatique

Cyrille KESIKU : cyrillekesiku@gmail.com

1
Passage de BD Relationnelle vers BD Orientée Document :
Identification des Entités :
● Identifier les entités du modèle relationnel. Chaque entité pourrait être
représentée par une collection dans la base de données orientée document.
Normalisation/Dénormalisation :
● Considérer la normalisation du modèle relationnel. Dans une base de
données orientée document, la dénormalisation est souvent appliquée pour
regrouper des données fréquemment utilisées dans un seul document.
Relation Un-à-Plusieurs :
● Pour les relations un-à-plusieurs dans le modèle relationnel, on peut
incorporer les informations de l'entité "plusieurs" directement dans le
document de l'entité "un".
Relation Plusieurs-à-Plusieurs :
● Pour les relations plusieurs-à-plusieurs, utiliser des tableaux dans les
documents pour représenter les connexions.
Définir les Index :
● Identifier les champs qui seront fréquemment utilisés dans les requêtes et
définir des index sur ces champs pour optimiser les performances.
Champs Dynamiques :
● Les bases de données orientées document permettent des schémas
flexibles. Si les données sont hétérogènes, cela peut simplifier le passage
du modèle relationnel vers le modèle orienté document.
Exemple :

Imaginons une modélisation relationnelle simple pour la gestion d'une bibliothèque avec
trois tables : "Livres", "Auteurs", et "Emprunts". Ensuite, je vais vous montrer comment
cela pourrait être modélisé dans une base de données orientée document.

Modèle Relationnel :
- Livres (ID_Livre, Titre, ID_Auteur, Année_Publication, Quantité_Disponible)
- Auteurs (ID_Auteur, Nom_Auteur, Nationalité)
- Emprunts (ID_Emprunt, ID_Livre, Date_Emprunt, Date_Retour, ID_Utilisateur)

Dans ce modèle, "Livres" stocke les informations sur les livres, "Auteurs" stocke les
informations sur les auteurs, et "Emprunts" stocke les détails des emprunts avec des
références aux livres et aux utilisateurs.
{
"_id": ObjectId("1"),
"titre": "Introduction to Algorithms",
"auteur": {
"id_auteur": ObjectId("101"),
"nom_auteur": "Thomas H. Cormen",
"nationalite": "American"
},
"annee_publication": 1990,
"quantite_disponible": 5,
"emprunts": [
{
"id_emprunt": ObjectId("201"),
"date_emprunt": ISODate("2023-01-15"),
"date_retour": ISODate("2023-02-01"),
"utilisateur": {
"id_utilisateur": ObjectId("301"),
"nom_utilisateur": "John Doe"
}
},
// Autres emprunts...
]
}
Dans cette partie pratique du cours, nous abordons les requêtes de base pour la
manipulation des données en MongoDB.

Nous allons exploiter la méthode CRUD pour CREATE, READ, UPDATE &
DELETE.

NB. Nous utiliserons la Base de donnees restaurant fournis dans OpenClassroom


ici :
https://openclassrooms.com/fr/courses/4462426-maitrisez-les-bases-de-donnees-n
osql/4474601-decouvrez-le-fonctionnement-de-mongodb

Cyrille KESIKU : cyrillekesiku@gmail.com 6


1. Les opérations CREATE

Les opérations de création ou d'insertion permettent d'ajouter de nouveaux documents à


une collection. Si la collection n'existe pas encore, les opérations d'insertion la créent.

- show dbs : Affiche la liste des bases de données.


- use ma_base_de_donnees : Cela crée une base de données appelée
"ma_base_de_donnees" si elle n'existe pas déjà.
- db.createCollection("ma_collection") : Cela crée une collection appelée
"ma_collection" dans la base de données actuelle.
- show collections: Affiche la liste des collections dans la base de données

Les méthodes ci-dessous sont utilisées pour insérer des documents dans une collection:

- db.collection.insertOne() Nouveau dans la version 3.2


- db.collection.insertMany() Nouveau dans la version 3.2
- db.collection.insert()

https://www.mongodb.com/docs/v3.2/crud/ Cyrille KESIKU : cyrillekesiku@gmail.com 7


db.collection.insertOne() : Cette requête permet d'insérer un
document dans une collection

Exemple :

use bd_resto /* création de la base de données bd_resto

db.client.insertOne({
matricule : '003321',
nom : 'KATALA',
prénom : 'Jules',
sexe: 'M'
}) /* création de la collection client et insertion d’un document

Cyrille KESIKU : cyrillekesiku@gmail.com 8


db.collection.insertMany() /* Cette requête permet d’inserer plusieurs documents a la fois
dans une collection

Exemple :

db.client.insertMany([
{ matricule : '003322', nom : 'KILOLO', prénom : 'Pierre', sexe: 'M'},
{ matricule : '003323', nom : 'BILENDU', prénom : 'Louise', sexe:
'F'},
{ matricule : '003324', nom : 'KANDONGO', prénom : 'Alliance', sexe:
'F'}
])

/* Insertion de plusieurs (3 dans notre cas) documents dans la collection client

Cyrille KESIKU : cyrillekesiku@gmail.com 9


db.collection.insert() : /* Insère un ou plusieurs documents dans une collection.
- Pour insérer un seul document, passez un document à la méthode ;
- pour insérer plusieurs documents, passez un tableau de documents à la méthode.

Exemple :

- insert avec un document :

db.client.insert({ matricule : '003325', nom : 'KASUKU', prénom : 'Gloria


Dei', sexe: 'M'})
/* Insert un document dans la collection client.

- insert avec plusieurs document

db.client.insertMany([
{ matricule : '003326', nom : 'KALUMUNA', prénom : 'Angelo', sexe:
'M'},
{ matricule : '003323', nom : 'KIDINDA', prénom : 'Jeanne', sexe:
'F'},
{ matricule : '003324', nom : 'MBULAYI', prénom : 'Onesime', sexe:
'M'} Cyrille KESIKU : cyrillekesiku@gmail.com 10
]) /* Insertion de 3 documents dans la collection client avec insert()
2. Méthode READ (lecture)

MongoDB propose la méthode db.collection.find() pour lire les documents d'une


collection. La méthode db.collection.find() renvoie un curseur vers les documents
correspondants.

Avec cette méthode on réalise plusieurs opérations de requêtes pour interroger la base de
données.

a. Exemple de lecture simple :

use bd_resto /* Accès à notre base de données bd_resto

db.client.find() /* Renvoi tous les documents dans la collection client


db.client.findOne() /* Renvoi un seul document de la collection client

Cyrille KESIKU : cyrillekesiku@gmail.com 11


b. Projection

- Retourner tous les champs des documents correspondants

db.client.find({ sexe: 'M'}) /* renvoi tous les client de sexe M (filtre)

- Retourner les champs spécifiés

db.client.find({ sexe: 'M'},{prénom : 1, sexe: 1 }) /* renvoi le


prenom et le sexe du client

{sexe: 'M'} filtre les client de sexe M et {prénom : 1, sexe: 1 } realise la


projection sur les champs prenom et sexe le 1 indique la reccuperation du champ, si
ce 0 alors le champ sera ignorer et ne s’affichiera pas.

- Accéder aux sous documents d’un document


db.resto.find({cuisine:'Bakery'},{'Name':1,cuisine:1,'grades.s
core':1})

/* Récupérer le nom, la cuisine et le score dans le sous document grades dont la


cuisine et ‘Bakery’ Cyrille KESIKU : cyrillekesiku@gmail.com 12
- Projection sur des documents intégrés dans un tableau (même chose comme dans la
requête précédente.)
db.resto.find({cuisine:'Bakery'},{'Name':1,cuisine:1,
'grades.score':1})

/*Récupérer le nom, la cuisine et le score dans le sous document grades dont la cuisine et
‘Bakery’

- Projection aux Éléments du tableau spécifiques


db.resto.find({cuisine: 'Bakery'},{'Name':1,cuisine:1,
grades:{$slice:0}})
/*Récupérer le premier élément du tableau
db.resto.find({cuisine: 'Bakery'},{'Name':1,cuisine:1,
grades:{$slice:-1}})
/*Récupérer le dernier élément du tableau
db.resto.findOne({cuisine: 'Bakery'},{'Name':1,cuisine:1,
grades:{$slice:[0,2]}})
/*Récupérer le premier et le deuxième élément du tableau sachant qu’il s’agit de l’intervalle
inclue à gauche et exclue à droite.

Cyrille KESIKU : cyrillekesiku@gmail.com 13


3. UPDATE sur le document (Mise à jour du document)

- db.collection.updateOne()
- db.collection.updateMany()
- db.collection.update()

Pour modifier un champ dans un document, MongoDB propose des opérateurs de


mise à jour, tels que $set pour modifier les valeurs.

Cyrille KESIKU : cyrillekesiku@gmail.com 14


a. db.collection.updateOne()
db.client.updateOne({'prénom':'Pierre'},{$set:{'Age':28}})
/* Modifier le champ Age, ici si le champ n’existe pas il
l’ajoute dans le document

b. db.collection.updateMany()

db.client.updateMany({'sexe':'M'},{$set:{'Home_site':'P
roche de U MAPON'}}) /* On ajoute a tous les homme le
champ Home_sie avec valeur ‘Proche de U MAPON’

c. db.collection.update()
db.client.updateMany({'sexe':'M'},{$set:{'Home_site':'Proche
de U MAPON',sexe: 'Masculin'}}) /* modifier plusieurs champs
d’un document

Cyrille KESIKU : cyrillekesiku@gmail.com 15


4. DELETE (Opération de suppression)

db.collection.deleteOne()
db.collection.deleteMany()
db.collection.remove()

a. db.collection.deleteOne()
db.client.deleteOne({sexe:'Masculin'})/* supprimer le
premier document dont le sexe est ‘Masculin’
b.db.collection.remove()
db.client.remove({sexe:'F'},1) /* supprimer tous les client
de sexe ‘F’
c.db.users.deleteMany()
db.client.deleteMany({sexe:'Masculin'}) /* supprimer tous
les client de sexe ‘Masculin’

Cyrille KESIKU : cyrillekesiku@gmail.com 16


Les opérateurs

1. Opérateurs de comparaisons

- $eq : Opérateur d'égalité


db.resto.find({ "grades.score": { $eq: 11 } }) /* sélectionne les
documents dans lesquels le score d’un grade = 11

db.resto.find({ "address.coord.coordinates": { $eq: [-73.9791458,


40.744328] } }) /* Sélection du document avec un tableau

db.resto.find({ "address.coord.coordinates": { $eq: -73.9791458} })


/* Sélection du document avec un élément du tableau

17
- $gt : strictement supérieur >
db.resto.find({ "grades.score": {$gt: 10 } })

- $gte : Superieur ou egale >=


db.resto.find({ "grades.score": {$gte: 10 } })

- $lt : Strictement inférieur à <


db.resto.find({ "grades.score": {$lt: 10 } })
- $lte : Inférieur ou égale à <=

db.resto.find({ "grades.score": {$lte: 10 } })

18
TD

1. Quels sont les détails du restaurant avec le nom "Morris Park Bake Shop"?
2. Pouvez-vous récupérer tous les restaurants situés dans le borough "Bronx"?
3. Quels sont les restaurants qui servent une cuisine de type "Bakery"?
4. Donnez-moi la liste des restaurants ayant le code postal "10462".
5. Quels sont les restaurants ayant obtenu une note "A" dans leurs évaluations?
6. Pouvez-vous me montrer les restaurants avec un score inférieur à 5 dans l'une de
leurs évaluations?
7. Quels sont les restaurants ayant reçu une évaluation après le 1er janvier 2013?
8. Donnez-moi les restaurants qui ont obtenu une note "B" avec un score inférieur à
10 dans l'une de leurs évaluations.
9. Pourriez-vous afficher uniquement le nom et le type de cuisine de chaque
restaurant?
10. Quels sont les restaurants triés par score décroissant dans leurs évaluations?

Vous aimerez peut-être aussi