Verwalten von MongoDB-embedded Dokumenten

MongoDBMongoDBBeginner
Jetzt üben

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab werden Sie lernen, wie Sie MongoDB-Embedded-Dokumente effektiv verwalten. Das Lab behandelt eine Reihe von Techniken, darunter das Erstellen von geschachtelten Dokumenten, das Aktualisieren von geschachtelten Feldern, das Entfernen von geschachtelten Elementen, das Abfragen von geschachtelten Daten und die Validierung der Dokumentstruktur. Diese Fähigkeiten sind unerlässlich, um mit komplexen, hierarchischen Daten in MongoDB umzugehen und Ihnen ermöglichen, robuste und effiziente Anwendungen zu entwickeln. Die schrittweisen Anweisungen bieten eine umfassende Anleitung zur Beherrschung der Verwaltung von Embedded-Dokumenten in Ihren MongoDB-Projekten.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL mongodb(("MongoDB")) -.-> mongodb/DataTypesGroup(["Data Types"]) mongodb(("MongoDB")) -.-> mongodb/BasicOperationsGroup(["Basic Operations"]) mongodb(("MongoDB")) -.-> mongodb/QueryOperationsGroup(["Query Operations"]) 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{{"Verwalten von MongoDB-embedded Dokumenten"}} mongodb/insert_document -.-> lab-422088{{"Verwalten von MongoDB-embedded Dokumenten"}} mongodb/update_document -.-> lab-422088{{"Verwalten von MongoDB-embedded Dokumenten"}} mongodb/query_with_conditions -.-> lab-422088{{"Verwalten von MongoDB-embedded Dokumenten"}} mongodb/use_string_data_types -.-> lab-422088{{"Verwalten von MongoDB-embedded Dokumenten"}} mongodb/work_with_array_data_types -.-> lab-422088{{"Verwalten von MongoDB-embedded Dokumenten"}} mongodb/manage_array_elements -.-> lab-422088{{"Verwalten von MongoDB-embedded Dokumenten"}} mongodb/create_embedded_documents -.-> lab-422088{{"Verwalten von MongoDB-embedded Dokumenten"}} mongodb/query_embedded_documents -.-> lab-422088{{"Verwalten von MongoDB-embedded Dokumenten"}} end

Erstellen von geschachtelten Dokumenten

In diesem Schritt lernen Sie, wie Sie in MongoDB geschachtelte Dokumente erstellen, was es Ihnen ermöglicht, komplexe, hierarchische Daten in einem einzelnen Dokument zu speichern. Geschachtelte Dokumente sind leistungsfähig bei der Darstellung von Beziehungen und strukturierten Informationen.

Zunächst starten wir die MongoDB-Shell:

mongosh

Nun erstellen wir eine Datenbank für unser Beispiel:

use bookstore

Wir werden eine Sammlung namens books mit geschachtelten Dokumenten erstellen, die die Buchdetails repräsentieren:

db.books.insertOne({
    title: "Advanced MongoDB",
    author: {
        name: "Jane Smith",
        contact: {
            email: "[email protected]",
            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" }
    ]
})

Zergliedern wir dieses Dokument:

  • Das Dokument hat ein Hauptfeld title
  • author ist ein geschachteltes Dokument mit den Unterdokumenten name und contact
  • published ist ein weiteres geschachteltes Dokument mit Veröffentlichungsdetails
  • chapters ist ein Array von geschachtelten Dokumenten, die die Buchkapitel repräsentieren

Um das gerade erstellte Dokument anzuzeigen, verwenden Sie:

db.books.find()

Beispielausgabe:

[
  {
    _id: ObjectId("..."),
    title: 'Advanced MongoDB',
    author: {
      name: 'Jane Smith',
      contact: {
        email: '[email protected]',
        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' }
    ]
  }
]

Aktualisieren von geschachtelten Feldern

In diesem Schritt lernen Sie, wie Sie geschachtelte Felder in MongoDB-Dokumenten aktualisieren. Auf Grundlage des vorherigen Schritts verwenden wir das Buchdokument, das wir erstellt haben, um verschiedene Aktualisierungstechniken für geschachtelte Dokumente zu demonstrieren.

Stellen Sie zunächst sicher, dass Sie in der MongoDB-Shell sind:

mongosh

Wechseln Sie zur Datenbank bookstore:

use bookstore

Lassen Sie uns die Kontaktinformationen des Autors mit dem $set-Operator aktualisieren:

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

Die Punktnotation "author.contact.phone" ermöglicht es uns, genau auf geschachtelte Felder zuzugreifen. Lassen Sie uns die Aktualisierung überprüfen:

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

Nun aktualisieren wir ein geschachteltes Array. Wir fügen einem neuen Kapitel zur chapters-Array hinzu:

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

Der $push-Operator fügt ein neues Element zu einem Array hinzu. Lassen Sie uns die Aktualisierung überprüfen:

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

Wir können auch ein bestimmtes geschachteltes Arrayelement mit dem positionellen $-Operator aktualisieren. Lassen Sie uns das erste Kapitel aktualisieren:

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

Die Beispielausgabe wird das aktualisierte Dokument mit modifizierten geschachtelten Feldern und hinzugefügtem Kapitel anzeigen.

Entfernen von geschachtelten Elementen

In diesem Schritt lernen Sie, wie Sie geschachtelte Elemente aus MongoDB-Dokumenten mit verschiedenen Operatoren entfernen. Wir werden weiterhin mit dem Buchdokument aus den vorherigen Schritten arbeiten.

Stellen Sie zunächst sicher, dass Sie in der MongoDB-Shell sind:

mongosh

Wechseln Sie zur Datenbank bookstore:

use bookstore

Lassen Sie uns ein bestimmtes Feld aus der geschachtelten Kontaktinformation mit dem $unset-Operator entfernen:

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

Der $unset-Operator entfernt das angegebene Feld vollständig. Lassen Sie uns die Aktualisierung überprüfen:

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

Nun entfernen wir ein bestimmtes Element aus dem chapters-Array mit dem $pull-Operator:

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

Der $pull-Operator entfernt alle Vorkommen eines übereinstimmenden Elements aus einem Array. Lassen Sie uns überprüfen:

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

Wir können auch das gesamte geschachtelte Kontaktobjekt entfernen:

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

Die Beispielausgabe wird das Dokument mit entfernten geschachtelten Elementen anzeigen.

Abfragen von geschachtelten Daten

In diesem Schritt lernen Sie, wie Sie in MongoDB geschachtelte Dokumente und Arrays abfragen. Wir werden verschiedene Techniken zur Filterung und Abrufung von spezifischen geschachtelten Daten erkunden.

Zunächst legen wir unsere Datenbank mit einigen Beispiel-Daten zurück, um die Abfrage zu demonstrieren:

mongosh

Wechseln Sie zur Datenbank bookstore:

use bookstore

Lassen Sie uns mehrere Bücher mit geschachtelten Strukturen einfügen:

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 }
        ]
    }
])

Abfragen eines Buches anhand eines geschachtelten Felds:

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

Abfrage mit Punktnotation für geschachtelte Objekte:

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

Abfrage mit Array enthält:

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

Abfragen von geschachtelten Array-Elementen:

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

Der $gt-Operator bedeutet "größer als", so dass diese Bücher mit Kapiteln länger als 40 Seiten findet.

Komplexe Abfrage, die geschachtelte Objekt- und Array-Bedingungen kombiniert:

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

Dies findet Bücher von Autoren mit 5 oder mehr Jahren Erfahrung und mit dem Tag "advanced".

Überprüfen der Dokumentstruktur

In diesem Schritt lernen Sie, wie Sie die Struktur von Dokumenten in MongoDB mithilfe der JSON-Schema-Validierung überprüfen. Dadurch wird sichergestellt, dass Ihre Dokumente eine konsistente und vorhersehbare Struktur aufrechterhalten.

Zunächst starten wir die MongoDB-Shell:

mongosh

Wechseln Sie zur Datenbank bookstore:

use bookstore

Wir werden eine neue Sammlung mit einem JSON-Schema-Validator erstellen:

db.createCollection("courses", {
   validator: {
      $jsonSchema: {
         bsonType: "object",
         required: ["title", "instructor", "duration", "topics"],
         properties: {
            title: {
               bsonType: "string",
               description: "muss ein String sein und ist erforderlich"
            },
            instructor: {
               bsonType: "object",
               required: ["name", "email"],
               properties: {
                  name: {
                     bsonType: "string",
                     description: "muss ein String sein und ist erforderlich"
                  },
                  email: {
                     bsonType: "string",
                     pattern: "^.+@.+$",
                     description: "muss eine gültige E-Mail-Adresse sein"
                  }
               }
            },
            duration: {
               bsonType: "int",
               minimum: 1,
               maximum: 100,
               description: "muss eine Ganzzahl zwischen 1 und 100 sein"
            },
            topics: {
               bsonType: "array",
               minItems: 1,
               items: {
                  bsonType: "string"
               },
               description: "muss ein Array von Strings mit mindestens einem Element sein"
            }
         }
      }
   }
})

Versuchen wir, ein gültiges Dokument einzufügen:

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

Nun versuchen wir ein ungültiges Dokument, das abgelehnt wird:

db.courses.insertOne({
   title: "Invalid Course",
   instructor: {
      name: 123,  // Ungültig: sollte ein String sein
      email: "invalid-email"  // Ungültiges E-Mail-Format
   },
   duration: 200,  // Außerhalb des Bereichs
   topics: []  // Leeres Themenarray
})

Dieser Einfügevorgang wird aufgrund der Validierungsregeln fehlschlagen.

Um die Validierungsregeln für eine Sammlung anzuzeigen:

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

Die Beispielausgabe wird die JSON-Schema-Validierungs-Konfiguration anzeigen.

Zusammenfassung

In diesem Lab lernen Sie, wie Sie MongoDB-embedded Dokumente verwalten. Zunächst werden Sie geschachtelte Dokumente erstellen, was es Ihnen ermöglicht, komplexe hierarchische Daten in einem einzelnen Dokument zu speichern. Dies ist leistungsfähig bei der Darstellung von Beziehungen und strukturiertem Informationen. Anschließend werden Sie geschachtelte Felder aktualisieren, geschachtelte Elemente entfernen, geschachtelte Daten abfragen und die Dokumentstruktur validieren. Diese Techniken demonstrieren die Flexibilität und Stärke des dokumentorientierten Datenmodells von MongoDB bei der Arbeit mit komplexen geschachtelten Datenstrukturen.