MongoDB Academy · Lektion

Einbetten: Beziehungen von eins zu wenigen

Betten Sie Unterdokumente für eng gekoppelte Daten ein und messen Sie den Vorteil bei der Leseleistung, der sich aus der gemeinsamen Ablage zusammengehöriger Informationen ergibt.

Lektion 1 von 413 Schritte

Einbetten: Beziehungen von eins zu wenigen ist eine kostenlose MongoDB Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des MongoDB Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der MongoDB Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist Document Embedding?

Embedding bedeutet, zugehörige Daten direkt in einem übergeordneten Dokument zu speichern, statt sie in einer separaten Collection abzulegen. Anstatt zwei Collections mit einem Fremdschlüssel zu verknüpfen, betten Sie die zugehörigen Daten als Unterdokument oder als Array von Unterdokumenten ein. Dies ist MongoDBs leistungsfähigstes Entwurfswerkzeug, weil ein einziger Lesevorgang das übergeordnete Dokument und alle zugehörigen Daten auf einmal abrufen kann.

Die One-to-Few-Beziehung

Eine One-to-Few-Beziehung liegt vor, wenn ein übergeordnetes Dokument eine kleine, begrenzte Anzahl untergeordneter Elemente enthält – typischerweise weniger als einige Dutzend. Klassische Beispiele sind ein Blogbeitrag mit seinen Kommentaren, ein Benutzer mit seinen Adressen oder eine Bestellung mit ihren Positionen. Wenn die Anzahl der untergeordneten Elemente vorhersehbar und klein ist, ist Embedding fast immer die richtige Wahl.

Adressen eines Benutzers einbetten

Betrachten Sie eine users-Collection, in der jeder Benutzer eine oder zwei Lieferadressen hat. Statt eine separate addresses-Collection zu verwenden, betten Sie die Adressen direkt ein. Dadurch lassen sich ein Benutzer und seine Adressen mit einer Abfrage und ohne Joins abrufen.

db.users.insertOne({
  name: 'Alice',
  email: 'alice@example.com',
  addresses: [
    { label: 'home', street: '123 Maple St', city: 'Austin', zip: '78701' },
    { label: 'work', street: '456 Oak Ave', city: 'Austin', zip: '78702' }
  ]
});

Eingebettete Daten mit einer Abfrage lesen

Wenn Daten eingebettet sind, rufen Sie das übergeordnete Dokument und alle untergeordneten Elemente mit einem einzigen findOne ab. Ein $lookup oder ein weiterer Roundtrip zur Datenbank ist nicht erforderlich. Dadurch werden Lesevorgänge schneller und der Anwendungscode einfacher, da der gesamte Objektgraph in einer Antwort eintrifft.

// Retrieve user AND their addresses in a single read
const user = await db.collection('users').findOne(
  { email: 'alice@example.com' },
  { projection: { name: 1, addresses: 1 } }
);
console.log(user.addresses); // Array of embedded address objects

Ein eingebettetes Unterdokument aktualisieren

Um ein eingebettetes Unterdokument zu aktualisieren, verwenden Sie den Positionsoperator $ oder die Punktnotation. Wenn Sie beispielsweise die Postleitzahl von Alices Privatadresse ändern, wird gezielt das Array-Element angesprochen, das eine Filterbedingung erfüllt. Aktualisierungen eingebetteter Daten erfolgen atomar auf Dokumentebene – eine Transaktion ist nicht erforderlich.

db.users.updateOne(
  { email: 'alice@example.com', 'addresses.label': 'home' },
  { $set: { 'addresses.$.zip': '78703' } }
);

Vorteil bei der Lese-Performance

MongoDB speichert Dokumente als zusammenhängende BSON-Blobs auf dem Datenträger. Wenn Sie zugehörige Daten einbetten, liest die Engine einen Speicherblock statt zwei separate Collections zu durchsuchen. Diese gemeinsame Speicherung zugehöriger Daten ist der Hauptgrund dafür, dass eingebettete Dokumente bei leseintensiven Workloads eine bessere Performance als Referenzen bieten, wenn übergeordnetes und untergeordnetes Dokument fast immer gemeinsam abgerufen werden.

Embedding in Mongoose

In Mongoose definieren Sie Schemata für Unterdokumente und betten sie in das übergeordnete Schema ein. Mongoose behandelt eingebettete Arrays als Unterdokument-Arrays und stellt für jedes Element eine vollständige Typvalidierung sowie Lifecycle-Hooks bereit. Das übergeordnete Model speichert den gesamten Baum atomar.

const addressSchema = new mongoose.Schema({
  label: String,
  street: String,
  city: String,
  zip: String
});

const userSchema = new mongoose.Schema({
  name: String,
  email: String,
  addresses: [addressSchema]  // embedded array of sub-documents
});

const User = mongoose.model('User', userSchema);

Wann sich Embedding besonders lohnt

Embedding eignet sich am besten, wenn: (1) die untergeordneten Daten immer zusammen mit dem übergeordneten Dokument abgerufen werden; (2) die Anzahl der untergeordneten Elemente klein und begrenzt ist; (3) die untergeordneten Elemente keinen eigenen unabhängigen Lebenszyklus benötigen (also beispielsweise nie isoliert abgefragt oder aktualisiert werden). Wenn alle drei Bedingungen erfüllt sind, ist Embedding fast sicher die optimale Wahl.

Größenlimit für Dokumente

Jedes MongoDB-Dokument hat eine feste Größenbeschränkung von 16 MB. Bei One-to-Few-Beziehungen ist das selten ein Problem – ein Benutzer mit zehn Adressen oder eine Bestellung mit zwanzig Positionen liegt deutlich innerhalb des Limits. Sie sollten das Wachstum von Dokumenten im Laufe der Zeit jedoch überwachen, damit Embedding die Dokumente nicht an die Obergrenze heranführt.

Embedding und Referenzierung im Überblick

Nutzen Sie diesen kurzen Vergleich als Entscheidungshilfe:

  • Embedding: eine Abfrage, atomare Aktualisierungen, kleine begrenzte Anzahl untergeordneter Elemente
  • Referenzierung: flexible Anzahl untergeordneter Elemente, gemeinsam verwendete untergeordnete Elemente, unabhängige Abfragen der untergeordneten Elemente

Bei One-to-Few-Beziehungen ist Embedding in fast jeder Hinsicht überlegen. Sie vermeiden zusätzliche Netzwerk-Roundtrips und halten Ihr Schema einfach.

Praxisbeispiel: Blogbeitrag-Tags

Ein Blogbeitrag hat normalerweise eine kleine, feste Menge an Tags. Statt eine separate tags-Collection mit Referenzen zu verwalten, betten Sie die Tags als Array von Zeichenfolgen direkt in das Beitragsdokument ein. Das Abfragen von Beiträgen nach Tags ist mit einem Multikey-Index auf dem Feld tags effizient, und beim Lesen eines Beitrags werden seine Tags immer im selben Dokument zurückgegeben.

db.posts.insertOne({
  title: 'Getting Started with MongoDB',
  body: 'MongoDB is a document database...',
  tags: ['mongodb', 'nosql', 'database'],
  author: 'Alice',
  createdAt: new Date()
});

// Index the tags array for fast tag-based lookups
db.posts.createIndex({ tags: 1 });

Kurzer Test

Testen Sie Ihr Verständnis der Konzepte zu MongoDB & NoSQL-Datenbanken aus dieser Lektion.

Lektionszusammenfassung

In dieser Lektion haben Sie gelernt: Embedding platziert zugehörige Daten im übergeordneten Dokument, One-to-Few-Beziehungen profitieren von Embedding, weil ein einziger Lesevorgang alle Daten abruft, und Mongoose unterstützt Unterdokument-Schemata für typsichere eingebettete Arrays. Als Nächstes untersuchen wir die Referenzierung – also wann Dokumente über Collections hinweg verknüpft werden sollten, anstatt sie zu verschachteln.

Kostenlos starten

Lerne JavaScript mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
30
Lektionen
120

Häufig gestellte Fragen

Ist die Lektion „Einbetten: Beziehungen von eins zu wenigen“ kostenlos?

Ja — der vollständige Text von „Einbetten: Beziehungen von eins zu wenigen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des MongoDB Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der MongoDB Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Einbetten: Beziehungen von eins zu wenigen“?

Betten Sie Unterdokumente für eng gekoppelte Daten ein und messen Sie den Vorteil bei der Leseleistung, der sich aus der gemeinsamen Ablage zusammengehöriger Informationen ergibt. Du übst MongoDB Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um MongoDB Academy zu starten?

Keine Vorkenntnisse erforderlich. MongoDB Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „Einbetten: Beziehungen von eins zu wenigen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser MongoDB Academy-Lektion Code schreiben und ausführen?

Ja. Jede MongoDB Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Einbetten: Beziehungen von eins zu wenigen
  2. Referenzieren: Beziehungen von eins zu vielen und viele zu vielen
  3. Das Anti-Pattern unbegrenzter Arrays
  4. Entscheidungsrahmen für das Sche madesign
← Zurück zu MongoDB Academy