MongoDB
Adel KHALFALLAH Institut Supérieur d’Informatique [email protected] [email protected]
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Définition des données
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Documents
• Un document est un ensemble ordonné de clés/valeur
{Nom : "Ali", Age : 26}
• Les valeurs prennent l’un des types de BSON parmi lesquels:
– Double/Decimal128/32-bits integer/64-bits integer
– String/Date/Boolean/Timestamp/Regular expression
– ObjectID, La valeur Null
– Array/Documents
• Les clés avec des casses ou des types différents sont différentes
{Age : 26} # {Age : "26"} et {Age : 26} # {age : 26}
• Les clés ne doivent pas être dupliquées
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Documents • Les tableaux sont de types hétérogène { description: ["homme", 46, 1.72]}
• Les documents sont imbriqués
{identite : {nom : "baligh", prenom: "hamdi"}}
• L’accès à une valeur d’un tableau ou une clé d’un
document intégré utilise la notation point:
description.2 46 identite.nom "baligh"
• Chaque document dispose d’une identification unique : Le
champ _id généré implicitement, il peut être défini explicitement
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Documents • ObjectId est le type par défaut de _Id, il est conçu pour être facile à générer dans un environnement distribué
• 12 Octets : 0 – 3 timestamp local (secondes), 4 – 6 identification de la machine, 7 – 8 identification du processus, les octets 0 à 8 garantissent une valeur unique par machine/processus toutes les secondes, 9 – 11 permettent d’avoir 224 valeurs différentes par seconde/process/machine
• Pour générer un ObjectId qui permet d’identifier un
Publicité
document dans un contexte distribué, les différentes machines n’ont pas besoin de se synchroniser
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Collections • Une collection est un ensemble de documents, elle est
définie par un nom
• Une collection n’a pas de schéma : elle peut contenir des
documents avec des formats différents, toutefois les validators permettent d’imposer des contraintes sur le type, les valeurs, l’existence, etc.
• La base de données accueille plusieurs collections
Relationnel Base de données Table Ligne
MongoDB Base de données Collection Document
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Create Read Update Delete (CRUD) Documents
• Créer un seul document
db.stock.insertOne(
{ article: "nappe", qte: 100, label: ["coton"], taille: {
long: 150, larg: 60} } )
Retourne le document {
"acknowledged" : true, "insertedId" : ObjectId("56fc40f9d735c28df206d078")
}
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Create Read Update Delete (CRUD) Documents
•
Insertion de plusieurs documents
db.stock.insertMany ([ { article: "nappe", qte: 100, label: ["coton"], taille: {
long: 150, larg: 60} },
{ article: "serviette", qte: 45, label: ["blanc", "beige" ],
taille: { long: 30, larg: 20} },
{ article: "mouchoir", qte: 30, label: ["synthétique"],
taille: { long: 20, larg: 20} }
])
Publicité
• Un document contenant les différents Ids est retourné
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Create Read Update Delete (CRUD) Documents
• La méthode find permet de retrouver des documents
db.collection.find(requête, projection)
requête et projection sont des documents
• • projection est de la forme: {clé: choix,…,cléTab: choix}
il permet d’expliciter les clés ou les éléments de tableau qui seront retournées. Choix est soit – Un booléen ou 0,1 il permet de spécifier l’inclusion ou l’exclusion
de la clé correspondante
– Soit une sélection d’éléments de tableau: $ désigne le premier élément d’un tableau, $elemMatch permet de spécifier une condition sur les éléments d’un tableau, $slice permet de spécifier le nombre d’éléments d’un tableau
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Create Read Update Delete (CRUD) Documents
db.collection.find(requête, projection)
• La requête prend plusieurs formes:
– {Clé : filtre} où filtre est un document construit grâce aux
opérateurs booléens logiques : $and, $or,… et de comparaison: $lt, $eq, $gt, …
– {CléTab : filtre} où CléTab est de type tableau et filtre reprend les
opérateurs précédents auxquels s’ajoutent les opérateurs $elemMatch, $size,… et il est aussi possible d’utiliser la notation point (tableau.index) pour manipuler un élément du tableau
– {CléDoc : filtre} où CléDoc est un document imbriqué et filtre est
un document simple ou construit grâce aux opérateurs précédents pour manipuler des documents imbriqués
– {CléDoc.Clé : filtre} dans le cas de documents imbriqués la
notation point permet de manipuler les clés internes
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Create Read Update Delete (CRUD) Documents
• Mettre à jour un seul document:
db.collection.updateOne(filtre,update[,params optionnels]) • Filtre est similaire à celui de find, il permet de spécifier le
document qui sera mis à jour
• Update spécifie la mis à jour, il peut être:
– Un opérateur de mise à jour: $set, $unset, $mul, $rename,… – Un pipeline de mise à jour, qui se déroule en 3 étapes: l’ajout de clés $set, la suppression de clés $unset et la mise à jour de valeurs
Publicité
• Mettre à jour plusieurs documents
db.collection.updateMany(filtre,update[,params optionnels]) Identique à updateOne, sauf que le filtre permet de retrouver plusieurs documents
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Create Read Update Delete (CRUD) Documents
• Modifier les valeurs d’un document:
db.collection.replaceOne(filter, remplDoc[,params optionnels])
• Le premier document spécifié par le filtre sera remplacé par le
document remplDoc
• Le document de remplacement remplDoc ne peut pas contenir
d’opérateurs de mise à jour, il n’est donc pas possible de modifier la structure du document sélectionné
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Create Read Update Delete (CRUD) Documents
• Suppression d’un seul document: db.collection.deleteOne(filtre[,params optionnels])
• Le filtre spécifie le document qui sera supprimé
• Suppression de plusieurs documents db.collection.deleteMany(filtre[,params optionnels])
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1
Traitement par lot
• Les opérations CRUD peuvent être exécutés par lot
db.collection.bulkWrite([ op1, op2, ... ] [,params optionnels])
• Op1, op2, … sont l’une des opérations CRUD vues
précédemment
• Elles sont exécutées dans l’ordre, si l’une d’elle échoue le
traitement s’arrête
•
Il est possible de préciser que l’exécution n’est pas séquentielle, le système peut alors réordonner les opérations et les exécuter en parallèle, l’échec d’une opération n’arrête pas l’ensemble
Adel KHALFALLAH - Génie logiciel - Bases de données NoSQL - Institut Supérieur d’Informatique - 1