Hinzufügen eines Arrays von Bestellpositionen
Eine Bestellung besteht typischerweise aus einem oder mehreren Produkten. Der beste Weg, diese Eins-zu-Viele-Beziehung innerhalb eines einzelnen Bestell-Dokuments zu modellieren, ist die Verwendung eines Arrays von eingebetteten Dokumenten. Jedes Element im Array repräsentiert eine Position in der Bestellung.
Aktualisieren wir unser Bestell-Dokument, um eine Liste von Positionen hinzuzufügen. Wir fügen ein Feld items hinzu, das ein Array sein wird. Jedes Objekt im Array enthält Details zu einem Produkt, wie z. B. seine ID, seinen Namen, seinen Preis und seine Menge.
Führen Sie den folgenden updateOne-Befehl aus:
db.orders.updateOne(
{ order_id: "ORD001" },
{
$set: {
items: [
{
product_id: "PROD01",
name: "Laptop",
price: 1200.0,
quantity: 1
},
{
product_id: "PROD02",
name: "Mouse",
price: 25.0,
quantity: 1
}
],
total: 1225.0
}
}
);
Hier verwenden wir erneut $set, um das items-Array hinzuzufügen. Wir aktualisieren auch das Feld total, um die Summe der Artikelpreise widerzuspiegeln. Die Speicherung des berechneten Gesamtbetrags direkt im Dokument ist eine weitere Leistungsoptimierung, da sie die Notwendigkeit einer Aggregation bei jedem Lesevorgang vermeidet.
Überprüfen wir das Dokument erneut, um das neue items-Array zu sehen.
db.orders.findOne({ order_id: "ORD001" });
Sie sehen das items-Array, das in das Bestell-Dokument eingebettet ist. Dieses Design ermöglicht es Ihnen, eine vollständige Bestellung, einschließlich aller ihrer Positionen, mit einer einzigen Datenbankabfrage abzurufen.