MongoDB Overview

Institut Supérieur d'Informatique
Page 1 sur 14Lecteur de document UniversityLib

MongoDB Overview

Institut Supérieur d'Informatique · Databases, NoSQL, Programming · notes

Voir tous les documents en bases de données

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