MongoDB Overview

Cette présentation offre une vue d'ensemble de MongoDB, une base de données NoSQL orientée documents. Elle s'inscrit dans un cours de génie logiciel consacré aux bases de données NoSQL et détaille les concepts fondamentaux, la structure des données, ainsi que les opérations CRUD (Create, Read, Update, Delete) sur les documents.

D'après le document MongoDB Overview

Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source

MongoDB Overview

Databases, NoSQL, Programming · Institut Supérieur d'Informatique · PDF · 14 pages

Afficher l'aperçu du document

Consulter le document original →

Cette présentation offre une vue d'ensemble de MongoDB, une base de données NoSQL orientée documents. Elle s'inscrit dans un cours de génie logiciel consacré aux bases de données NoSQL et détaille les concepts fondamentaux, la structure des données, ainsi que les opérations CRUD (Create, Read, Update, Delete) sur les documents.

Les documents dans MongoDB

Un document est une structure de données composée d'un ensemble ordonné de paires clé/valeur. Par exemple :

{Nom : "Ali", Age : 26}

Les valeurs peuvent être de différents types BSON, notamment :

  • Double, Decimal128, entier 32 bits ou 64 bits
  • Chaînes de caractères (String), Date, Boolean, Timestamp, expressions régulières
  • ObjectID, valeur Null
  • Tableaux (Array) et documents imbriqués

Les clés sont sensibles à la casse et au type, ce qui signifie que {Age : 26} est différent de {age : 26} ou {Age : "26"}. De plus, les clés ne doivent pas être dupliquées dans un même document.

Les tableaux peuvent contenir des éléments de types hétérogènes, par exemple :

{ description: ["homme", 46, 1.72] }

Les documents peuvent également être imbriqués, comme dans :

{ identite : { nom : "baligh", prenom: "hamdi" } }

L'accès aux valeurs dans un tableau ou dans un document imbriqué se fait par la notation pointée :

  • description.2 renvoie 46 (le troisième élément du tableau)
  • identite.nom renvoie "baligh"

Chaque document possède un identifiant unique appelé _id, généré implicitement par MongoDB, mais pouvant aussi être défini explicitement.

L’identifiant ObjectId

Le type par défaut du champ _id est ObjectId. Il est conçu pour être généré facilement dans un environnement distribué sans nécessiter de synchronisation entre machines.

Un ObjectId est constitué de 12 octets répartis ainsi :

  • 0 à 3 : timestamp local en secondes
  • 4 à 6 : identification de la machine
  • 7 à 8 : identification du processus
  • 9 à 11 : compteur permettant d’avoir 224 valeurs différentes par seconde, processus et machine

Cette structure garantit l’unicité de l’identifiant sur une machine et un processus donnés, toutes les secondes.

Collections et base de données

Une collection est un ensemble de documents regroupés sous un nom. Contrairement aux bases relationnelles, une collection n’impose pas de schéma strict : elle peut contenir des documents de formats différents. Cependant, il est possible d’utiliser des validateurs pour imposer des contraintes sur les types, les valeurs ou l’existence de certaines clés.

Une base de données MongoDB contient plusieurs collections.

Pour comparer avec le modèle relationnel :

  • Base de données relationnelle correspond à une base de données MongoDB
  • Table relationnelle correspond à une collection MongoDB
  • Ligne relationnelle correspond à un document MongoDB

Opérations CRUD sur les documents

Création de documents

Pour insérer un seul document dans une collection, on utilise la commande insertOne :

db.stock.insertOne(
  { article: "nappe", qte: 100, label: ["coton"], taille: { long: 150, larg: 60 } }
)

Cette commande retourne un document confirmant l’insertion :

{
  "acknowledged" : true,
  "insertedId" : ObjectId("56fc40f9d735c28df206d078")
}

Pour insérer plusieurs documents simultanément, on utilise insertMany :

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 identifiants des documents insérés est retourné.

Lecture des documents

La méthode find permet de retrouver des documents selon une requête et une projection :

db.collection.find(requête, projection)

La requête et la projection sont des documents. La projection définit les clés ou éléments de tableaux à retourner. Elle peut contenir :

  • Un booléen ou 0/1 pour inclure ou exclure une clé
  • Des sélections d’éléments de tableau avec des opérateurs comme :
    • $ : premier élément d’un tableau
    • $elemMatch : condition sur les éléments d’un tableau
    • $slice : nombre d’éléments d’un tableau à retourner

La requête peut prendre plusieurs formes :

  • {Clé : filtre} où filtre utilise des opérateurs booléens ($and, $or) ou de comparaison ($lt, $eq, $gt)
  • {CléTab : filtre} pour les tableaux, avec des opérateurs spécifiques comme $elemMatch, $size, ou la notation pointée (tableau.index)
  • {CléDoc : filtre} pour les documents imbriqués, avec des filtres simples ou complexes
  • {CléDoc.Clé : filtre} utilisant la notation point pour accéder aux clés internes

Mise à jour des documents

Pour mettre à jour un seul document, on utilise :

db.collection.updateOne(filtre, update[, params optionnels])

Le filtre sélectionne le document à modifier, et update spécifie la modification. Cette dernière peut être :

  • Un opérateur de mise à jour tel que $set, $unset, $mul, $rename, etc.
  • Un pipeline de mise à jour en trois étapes : ajout de clés ($set), suppression ($unset) et modification de valeurs

Pour mettre à jour plusieurs documents simultanément, on utilise updateMany, qui fonctionne de la même manière mais applique la modification à tous les documents correspondant au filtre.

Il est également possible de remplacer entièrement un document avec :

db.collection.replaceOne(filter, remplDoc[, params optionnels])

Le document correspondant au filtre est remplacé par remplDoc. Ce dernier ne peut pas contenir d’opérateurs de mise à jour, ce qui signifie qu’on ne peut pas modifier partiellement la structure du document avec cette méthode.

Suppression de documents

Pour supprimer un seul document :

db.collection.deleteOne(filtre[, params optionnels])

Pour supprimer plusieurs documents :

db.collection.deleteMany(filtre[, params optionnels])

Le filtre spécifie les documents à supprimer.

Traitement par lot

MongoDB permet d’exécuter plusieurs opérations CRUD en une seule commande avec bulkWrite :

db.collection.bulkWrite([ op1, op2, ... ] [, params optionnels])

Chaque opération (op1, op2, etc.) est une opération CRUD vue précédemment. Elles sont exécutées dans l’ordre, et si l’une échoue, le traitement s’arrête par défaut.

Il est possible de configurer l’exécution pour qu’elle ne soit pas séquentielle, permettant au système de réordonner les opérations et de les exécuter en parallèle. Dans ce mode, l’échec d’une opération n’interrompt pas l’ensemble du traitement.

Points clés

  • Un document MongoDB est un ensemble ordonné de paires clé/valeur avec des types BSON variés.
  • Les documents peuvent contenir des tableaux hétérogènes et des documents imbriqués.
  • Chaque document possède un identifiant unique _id, généralement de type ObjectId, conçu pour garantir l’unicité dans un environnement distribué.
  • Une collection regroupe des documents sans imposer de schéma strict, mais des validateurs peuvent appliquer des contraintes.
  • Les opérations CRUD permettent de créer, lire, mettre à jour et supprimer des documents, avec des commandes spécifiques pour chaque action.
  • La méthode find utilise des requêtes et projections complexes pour filtrer et sélectionner les données retournées.
  • Les mises à jour peuvent être partielles avec des opérateurs ou totales via replaceOne.
  • Les opérations CRUD peuvent être exécutées en lot avec bulkWrite, en séquentiel ou en parallèle.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions