Gérer les documents imbriqués de MongoDB

MongoDBMongoDBBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, vous allez apprendre à gérer efficacement les documents imbriqués de MongoDB. Le laboratoire couvre une gamme de techniques, notamment la création de documents imbriqués, la mise à jour de champs imbriqués, la suppression d'éléments imbriqués, la requête de données imbriquées et la validation de la structure du document. Ces compétences sont essentielles pour travailler avec des données complexes et hiérarchisées dans MongoDB, vous permettant de construire des applications robustes et efficaces. Les instructions étape par étape fournissent un guide complet pour maîtriser la gestion des documents imbriqués dans vos projets MongoDB.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) mongodb(("MongoDB")) -.-> mongodb/DataTypesGroup(["Data Types"]) mongodb(("MongoDB")) -.-> mongodb/ArrayandEmbeddedDocumentsGroup(["Array and Embedded Documents"]) mongodb/BasicOperationsGroup -.-> mongodb/create_database_collection("Create Database and Collection") mongodb/BasicOperationsGroup -.-> mongodb/insert_document("Insert Document") mongodb/BasicOperationsGroup -.-> mongodb/update_document("Update Document") mongodb/QueryOperationsGroup -.-> mongodb/query_with_conditions("Query with Conditions") mongodb/DataTypesGroup -.-> mongodb/use_string_data_types("Use String Data Types") mongodb/DataTypesGroup -.-> mongodb/work_with_array_data_types("Work with Array Data Types") mongodb/DataTypesGroup -.-> mongodb/manage_array_elements("Manage Array Elements") mongodb/ArrayandEmbeddedDocumentsGroup -.-> mongodb/create_embedded_documents("Create Embedded Documents") mongodb/ArrayandEmbeddedDocumentsGroup -.-> mongodb/query_embedded_documents("Query Embedded Documents") subgraph Lab Skills mongodb/create_database_collection -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} mongodb/insert_document -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} mongodb/update_document -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} mongodb/query_with_conditions -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} mongodb/use_string_data_types -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} mongodb/work_with_array_data_types -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} mongodb/manage_array_elements -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} mongodb/create_embedded_documents -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} mongodb/query_embedded_documents -.-> lab-422088{{"Gérer les documents imbriqués de MongoDB"}} end

Créer des documents imbriqués

Dans cette étape, vous allez apprendre à créer des documents imbriqués dans MongoDB, ce qui vous permet de stocker des données complexes et hiérarchisées dans un seul document. Les documents imbriqués sont puissants pour représenter des relations et des informations structurées.

Tout d'abord, lançons le shell MongoDB :

mongosh

Maintenant, créons une base de données pour notre exemple :

use bookstore

Nous allons créer une collection appelée books avec des documents imbriqués représentant les détails des livres :

db.books.insertOne({
    title: "Advanced MongoDB",
    author: {
        name: "Jane Smith",
        contact: {
            email: "jane.smith@example.com",
            phone: "+1-555-123-4567"
        }
    },
    published: {
        year: 2023,
        publisher: "Tech Publications"
    },
    chapters: [
        { number: 1, title: "Introduction to Nested Documents" },
        { number: 2, title: "Advanced Document Structures" }
    ]
})

Analysons ce document :

  • Le document a un champ principal title
  • author est un document imbriqué avec des sous-documents name et contact
  • published est un autre document imbriqué avec des détails de publication
  • chapters est un tableau de documents imbriqués représentant les chapitres du livre

Pour afficher le document que nous venons de créer, utilisez :

db.books.find()

Sortie exemple :

[
  {
    _id: ObjectId("..."),
    title: 'Advanced MongoDB',
    author: {
      name: 'Jane Smith',
      contact: {
        email: 'jane.smith@example.com',
        phone: '+1-555-123-4567'
      }
    },
    published: {
      year: 2023,
      publisher: 'Tech Publications'
    },
    chapters: [
      { number: 1, title: 'Introduction to Nested Documents' },
      { number: 2, title: 'Advanced Document Structures' }
    ]
  }
]

Mettre à jour des champs imbriqués

Dans cette étape, vous allez apprendre à mettre à jour des champs imbriqués dans les documents MongoDB. En vous appuyant sur l'étape précédente, nous allons utiliser le document de livre que nous avons créé pour démontrer diverses techniques de mise à jour pour les documents imbriqués.

Tout d'abord, assurez-vous d'être dans le shell MongoDB :

mongosh

Changez vers la base de données bookstore :

use bookstore

Mettons à jour les informations de contact de l'auteur en utilisant l'opérateur $set :

db.books.updateOne(
    { title: "Advanced MongoDB" },
    { $set: {
        "author.contact.phone": "+1-888-999-0000",
        "author.contact.website": "www.janesmith.com"
    } }
)

La notation point "author.contact.phone" nous permet de cibler précisément les champs imbriqués. Vérifions la mise à jour :

db.books.find({ title: "Advanced MongoDB" })

Maintenant, mettons à jour un tableau imbriqué. Nous allons ajouter un nouveau chapitre au tableau chapters :

db.books.updateOne(
    { title: "Advanced MongoDB" },
    { $push: {
        chapters: {
            number: 3,
            title: "MongoDB Advanced Techniques"
        }
    } }
)

L'opérateur $push ajoute un nouvel élément à un tableau. Vérifions la mise à jour :

db.books.find({ title: "Advanced MongoDB" })

Nous pouvons également mettre à jour un élément spécifique d'un tableau imbriqué en utilisant l'opérateur positionnel $. Mettons à jour le premier chapitre :

db.books.updateOne(
    { title: "Advanced MongoDB", "chapters.number": 1 },
    { $set: {
        "chapters.$.title": "Introduction to Nested Documents (Revised)"
    } }
)

La sortie exemple montrera le document mis à jour avec des champs imbriqués modifiés et un chapitre ajouté.

Supprimer des éléments imbriqués

Dans cette étape, vous allez apprendre à supprimer des éléments imbriqués des documents MongoDB en utilisant divers opérateurs. Nous allons continuer à travailler avec le document de livre des étapes précédentes.

Tout d'abord, assurez-vous d'être dans le shell MongoDB :

mongosh

Changez vers la base de données bookstore :

use bookstore

Supprimons un champ spécifique des informations de contact imbriquées en utilisant l'opérateur $unset :

db.books.updateOne(
    { title: "Advanced MongoDB" },
    { $unset: { "author.contact.website": "" } }
)

L'opérateur $unset supprime complètement le champ spécifié. Vérifions la mise à jour :

db.books.find({ title: "Advanced MongoDB" })

Maintenant, supprimons un élément spécifique du tableau chapters en utilisant l'opérateur $pull :

db.books.updateOne(
    { title: "Advanced MongoDB" },
    { $pull: {
        chapters: { number: 3 }
    } }
)

L'opérateur $pull supprime toutes les instances d'un élément correspondant d'un tableau. Vérifions :

db.books.find({ title: "Advanced MongoDB" })

Nous pouvons également supprimer l'objet de contact imbriqué complet :

db.books.updateOne(
    { title: "Advanced MongoDB" },
    { $unset: { "author.contact": "" } }
)

La sortie exemple montrera le document avec les éléments imbriqués supprimés.

Interroger des données imbriquées

Dans cette étape, vous allez apprendre à interroger des documents et des tableaux imbriqués dans MongoDB. Nous allons explorer différentes techniques pour filtrer et récupérer des données imbriquées spécifiques.

Tout d'abord, remettons notre base de données à zéro avec quelques données d'exemple pour démontrer l'interrogation :

mongosh

Changez vers la base de données bookstore :

use bookstore

Insérons plusieurs livres avec des structures imbriquées :

db.books.insertMany([
    {
        title: "MongoDB Essentials",
        author: {
            name: "John Doe",
            experience: { years: 5, specialization: "Database Design" }
        },
        tags: ["beginner", "database", "nosql"],
        chapters: [
            { number: 1, title: "Introduction", pages: 25 },
            { number: 2, title: "Advanced Concepts", pages: 45 }
        ]
    },
    {
        title: "Advanced Database Techniques",
        author: {
            name: "Jane Smith",
            experience: { years: 8, specialization: "Distributed Systems" }
        },
        tags: ["advanced", "distributed", "nosql"],
        chapters: [
            { number: 1, title: "System Design", pages: 35 },
            { number: 2, title: "Performance Optimization", pages: 55 }
        ]
    }
])

Interrogez un livre par un champ imbriqué :

db.books.find({ "author.name": "John Doe" })

Interrogez en utilisant la notation point pour les objets imbriqués :

db.books.find({ "author.experience.specialization": "Database Design" })

Interrogez en utilisant le tableau contient :

db.books.find({ tags: "nosql" })

Interrogez les éléments de tableau imbriqués :

db.books.find({ "chapters.pages": { $gt: 40 } })

L'opérateur $gt signifie "plus grand que", donc cela trouve les livres avec des chapitres plus longs que 40 pages.

Requête complexe combinant des conditions d'objet et de tableau imbriqués :

db.books.find({
    "author.experience.years": { $gte: 5 },
    tags: "advanced"
})

Cela trouve les livres des auteurs ayant 5 ans d'expérience ou plus et étiquetés comme "advanced".

Valider la structure des documents

Dans cette étape, vous allez apprendre à valider les structures de documents dans MongoDB en utilisant la validation JSON Schema. Cela garantit que vos documents conservent une structure cohérente et prévisible.

Tout d'abord, lançons le shell MongoDB :

mongosh

Changeons vers la base de données bookstore :

use bookstore

Nous allons créer une nouvelle collection avec un validateur JSON Schema :

db.createCollection("courses", {
   validator: {
      $jsonSchema: {
         bsonType: "object",
         required: ["title", "instructor", "duration", "topics"],
         properties: {
            title: {
               bsonType: "string",
               description: "doit être une chaîne de caractères et est obligatoire"
            },
            instructor: {
               bsonType: "object",
               required: ["name", "email"],
               properties: {
                  name: {
                     bsonType: "string",
                     description: "doit être une chaîne de caractères et est obligatoire"
                  },
                  email: {
                     bsonType: "string",
                     pattern: "^.+@.+$",
                     description: "doit être une adresse e-mail valide"
                  }
               }
            },
            duration: {
               bsonType: "int",
               minimum: 1,
               maximum: 100,
               description: "doit être un entier compris entre 1 et 100"
            },
            topics: {
               bsonType: "array",
               minItems: 1,
               items: {
                  bsonType: "string"
               },
               description: "doit être un tableau de chaînes de caractères avec au moins un élément"
            }
         }
      }
   }
})

Essayons d'insérer un document valide :

db.courses.insertOne({
   title: "MongoDB Advanced Techniques",
   instructor: {
      name: "Jane Smith",
      email: "jane.smith@example.com"
   },
   duration: 40,
   topics: ["Nested Documents", "Schema Validation"]
})

Maintenant, essayons un document invalide qui sera rejeté :

db.courses.insertOne({
   title: "Invalid Course",
   instructor: {
      name: 123,  // Invalide : devrait être une chaîne de caractères
      email: "invalid-email"  // Format d'e-mail invalide
   },
   duration: 200,  // Hors plage
   topics: []  // Tableau de sujets vide
})

Cette insertion échouera en raison des règles de validation.

Pour voir les règles de validation d'une collection :

db.getCollectionInfos({ name: "courses" })

La sortie exemple montrera la configuration de validation JSON Schema.

Récapitulatif

Dans ce laboratoire, vous allez apprendre à gérer les documents imbriqués de MongoDB. Tout d'abord, vous allez créer des documents imbriqués, ce qui vous permet de stocker des données complexes et hiérarchiques dans un seul document. Cela est puissant pour représenter des relations et des informations structurées. Ensuite, vous allez mettre à jour des champs imbriqués, supprimer des éléments imbriqués, interroger des données imbriquées et valider la structure des documents. Ces techniques démontrent la flexibilité et le pouvoir du modèle de données orienté document de MongoDB pour travailler avec des structures de données complexes et imbriquées.