Définition des données
Lien téléchargement Cours mongodb
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
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
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
document dans un contexte distribué, les différentes
machines n’ont pas besoin de se synchroniser
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 MongoDB
Base de données Base de données
Table Collection
Ligne Document
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 »)
}
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} }
])
• Un document contenant les différents Ids est retourné
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
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
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
• Mettre à jour plusieurs documents
db.collection.updateMany(filtre,update[,params optionnels])
Identique à updateOne, sauf que le filtre permet de retrouver plusieurs
documents
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é
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])
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