MongoDB Produktdaten strukturieren

MongoDBBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie die Grundlagen des Entwurfs eines strukturierten Schemas für Produktdaten mit MongoDB. Für eine E-Commerce-Anwendung ist ein gut gestaltetes Schema entscheidend für Leistung und Skalierbarkeit. Sie beginnen mit der Erstellung eines einfachen Produktdokuments und verbessern es schrittweise, indem Sie zugehörige Daten wie Preis- und Lagerinformationen einbetten und Arrays für Mehrwertattribute verwenden. Am Ende dieses Labs werden Sie ein fundiertes Verständnis dafür haben, wie Produktdaten effektiv in einer MongoDB-Datenbank modelliert werden.

Erstellen eines grundlegenden Produktdokuments

In diesem ersten Schritt verbinden Sie sich mit dem MongoDB-Server, erstellen eine neue Datenbank und fügen Ihr erstes Produktdokument ein. Dies bildet die Grundlage für unseren Produktkatalog.

Öffnen Sie zunächst die MongoDB Shell (mongosh), um von Ihrem Terminal aus mit der Datenbank zu interagieren.

mongosh

Sie sehen eine Eingabeaufforderung wie test>, die anzeigt, dass Sie mit dem MongoDB-Server verbunden sind. Erstellen und wechseln Sie nun zu einer neuen Datenbank namens product_catalog. In MongoDB wird eine Datenbank automatisch erstellt, wenn Sie dort zum ersten Mal Daten speichern.

use product_catalog

Die Ausgabe switched to db product_catalog bestätigt, dass Sie nun innerhalb dieser neuen Datenbank arbeiten.

Als Nächstes erstellen wir eine Collection namens products und fügen ein einzelnes Dokument ein. Ein Dokument in MongoDB ist ein BSON-Objekt, das wie JSON dargestellt wird. Wir verwenden die Methode insertOne().

db.products.insertOne({
  name: "Wireless Headphones",
  brand: "SoundWave",
  category: "Electronics",
  sku: "SW-HD-001"
});

Dieser Befehl fügt ein Dokument mit vier Feldern ein: name, brand, category und sku. Die Ausgabe zeigt eine Bestätigung und die eindeutige _id, die MongoDB dem Dokument zugewiesen hat.

{
  "acknowledged": true,
  "insertedId": ObjectId("...")
}

Um zu überprüfen, ob das Dokument erfolgreich erstellt wurde, können Sie die Methode find() verwenden, um alle Dokumente aus der products-Collection abzurufen.

db.products.find();

Die Ausgabe zeigt das gerade eingefügte Dokument an, einschließlich seiner automatisch generierten _id.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001'
  }
]

Sie haben nun erfolgreich Ihr erstes Produktdokument erstellt. Wir werden für die nächsten Schritte weiterhin in der mongosh-Shell arbeiten.

Einbetten von Preis- und Lagerinformationen

Ein wesentlicher Vorteil des Dokumentenmodells von MongoDB ist die Möglichkeit, zusammengehörige Informationen in einem einzigen Dokument einzubetten. In diesem Schritt aktualisieren Sie das vorhandene Produkt, um verschachtelte Objekte für Preis- und Lagerdetails einzufügen. Dieser Ansatz hält alle relevanten Produktdaten zusammen, was die Abfrageleistung verbessern kann, indem die Notwendigkeit separater Lookups reduziert wird.

Wir verwenden die Methode updateOne(), um das von uns erstellte Dokument zu ändern. Diese Methode nimmt zwei Argumente entgegen: einen Filter zur Identifizierung des zu aktualisierenden Dokuments und einen Update-Operator, der die Änderungen spezifiziert.

Fügen wir ein price-Objekt und ein stock-Objekt hinzu. Wir verwenden den $set-Operator, um diese neuen Felder hinzuzufügen.

db.products.updateOne(
  { sku: "SW-HD-001" },
  {
    $set: {
      price: {
        base: 149.99,
        currency: "USD"
      },
      stock: {
        quantity: 250,
        inStock: true
      }
    }
  }
);

Lassen Sie uns diesen Befehl aufschlüsseln:

  • Das erste Objekt { sku: "SW-HD-001" } ist der Filter. Es weist MongoDB an, das Dokument zu finden, bei dem das Feld sku "SW-HD-001" ist.
  • Das zweite Objekt { $set: { ... } } ist die Update-Operation. $set fügt neue Felder hinzu oder ändert vorhandene. Hier fügen wir die Felder price und stock hinzu, die selbst eingebettete Dokumente sind.

Die Ausgabe bestätigt, dass ein Dokument gefunden und geändert wurde.

{
  "acknowledged": true,
  "insertedId": null,
  "matchedCount": 1,
  "modifiedCount": 1,
  "upsertedCount": 0
}

Rufen wir nun das Dokument erneut ab, um die Änderungen zu sehen.

db.products.find({ sku: "SW-HD-001" });

Die Ausgabe zeigt nun das Produkt mit den neu eingebetteten price- und stock-Informationen. Diese Struktur ist organisierter und intuitiver als separate Tabellen für Preise und Lagerbestand in einer relationalen Datenbank.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true }
  }
]

Verwenden von Arrays für Produktattribute

Produkte haben oft Attribute, die mehrere Werte haben können, wie z. B. verfügbare Farben, Tags für die Suche oder eine Liste von Spezifikationen. MongoDB handhabt dies elegant mit Arrays. In diesem Schritt fügen Sie Ihrem Produktdokument ein Array von Tags hinzu.

Wir verwenden erneut die Methode updateOne() mit dem $set-Operator, um ein neues Feld namens tags hinzuzufügen. Dieses Feld wird ein Array von Strings enthalten.

db.products.updateOne(
  { sku: "SW-HD-001" },
  {
    $set: {
      tags: ["audio", "wireless", "over-ear", "noise-canceling"]
    }
  }
);

Dieser Befehl findet das Produkt mit sku: "SW-HD-001" und fügt ihm ein tags-Array hinzu. Die Ausgabe bestätigt erneut, dass ein Dokument geändert wurde.

Um das Ergebnis zu sehen, fragen Sie das Dokument noch einmal ab.

db.products.find({ sku: "SW-HD-001" });

Das aktualisierte Dokument enthält nun das tags-Array. Das Speichern dieser Werte in einem Array erleichtert die Abfrage von Produkten, die einen bestimmten Tag haben.

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true },
    tags: [ 'audio', 'wireless', 'over-ear', 'noise-canceling' ]
  }
]

Arrays sind ein mächtiges Merkmal für die Modellierung von Eins-zu-Viele-Beziehungen und das Speichern von Listen zusammengehöriger Daten direkt in einem Dokument.

Mehrere Produkte hinzufügen und abfragen

Ein Produktkatalog wird viele Artikel enthalten. In diesem Schritt lernen Sie, wie Sie mehrere Produkte gleichzeitig hinzufügen und dann eine grundlegende Abfrage durchführen, um sie zu filtern.

Um mehrere Dokumente gleichzeitig in eine Collection einzufügen, können Sie die Methode insertMany() verwenden. Diese Methode nimmt ein Array von Dokumenten als Argument entgegen. Fügen wir zwei neue Produkte zu unserer products-Collection hinzu.

db.products.insertMany([
  {
    name: "Smartwatch",
    brand: "FitTech",
    category: "Electronics",
    sku: "FT-SW-005",
    price: { base: 199.99, currency: "USD" },
    stock: { quantity: 150, inStock: true },
    tags: ["wearable", "fitness", "smartwatch"]
  },
  {
    name: "Classic T-Shirt",
    brand: "UrbanWear",
    category: "Apparel",
    sku: "UW-TS-001",
    price: { base: 24.99, currency: "USD" },
    stock: { quantity: 500, inStock: true },
    tags: ["clothing", "cotton", "casual"]
  }
]);

Die Ausgabe bestätigt den Vorgang und listet die _id-Werte der beiden neu eingefügten Dokumente auf.

Nachdem wir nun mehrere Produkte haben, führen wir eine Abfrage durch, um nur die Produkte zu finden, die zur Kategorie "Electronics" gehören. Dies können Sie tun, indem Sie ein Filterobjekt an die Methode find() übergeben.

db.products.find({ category: "Electronics" });

Dieser Befehl durchsucht die products-Collection und gibt nur die Dokumente zurück, bei denen das Feld category den Wert "Electronics" hat.

Die Ausgabe zeigt die beiden elektronischen Produkte in unserem Katalog: die "Wireless Headphones" und die "Smartwatch".

[
  {
    _id: ObjectId('...'),
    name: 'Wireless Headphones',
    brand: 'SoundWave',
    category: 'Electronics',
    sku: 'SW-HD-001',
    price: { base: 149.99, currency: 'USD' },
    stock: { quantity: 250, inStock: true },
    tags: [ 'audio', 'wireless', 'over-ear', 'noise-canceling' ]
  },
  {
    _id: ObjectId('...'),
    name: 'Smartwatch',
    brand: 'FitTech',
    category: 'Electronics',
    sku: 'FT-SW-005',
    price: { base: 199.99, currency: 'USD' },
    stock: { quantity: 150, inStock: true },
    tags: [ 'wearable', 'fitness', 'smartwatch' ]
  }
]

Sie haben nun die grundlegenden Operationen zur Verwaltung eines Produktkatalogs geübt. Sie können die MongoDB-Shell beenden.

exit;

Zusammenfassung

In diesem Lab haben Sie die grundlegenden Prinzipien der Strukturierung von Produktdaten in MongoDB kennengelernt. Sie begannen mit der Erstellung einer Datenbank und dem Einfügen eines grundlegenden Produktdokuments. Anschließend haben Sie dieses Dokument erweitert, indem Sie zugehörige Daten wie Preis- und Lagerinformationen in verschachtelte Objekte eingebettet haben. Sie haben auch gelernt, wie Sie Arrays verwenden, um Attribute mit mehreren Werten, wie z. B. Produkt-Tags, zu verwalten. Schließlich haben Sie das Hinzufügen mehrerer Dokumente zu einer Collection und das Ausführen einer grundlegenden Abfrage zum Filtern von Daten basierend auf einem bestimmten Feld geübt. Diese Fähigkeiten bilden eine solide Grundlage für den Aufbau flexibler und effizienter Datenmodelle für E-Commerce-Anwendungen und andere Systeme, die MongoDB verwenden.