Dokumente nach Feld gruppieren
Der erste Schritt bei der Datenaggregation ist oft das Gruppieren von Dokumenten basierend auf einem gemeinsamen Feld. In diesem Schritt verbinden Sie sich mit der MongoDB-Shell, erstellen eine neue Datenbank und Sammlung und verwenden dann den $group-Operator, um Dokumente nach Kategorie zu gruppieren.
Öffnen Sie zunächst die MongoDB-Shell, indem Sie den folgenden Befehl in Ihrem Terminal ausführen:
mongosh
Sobald Sie sich in der Shell befinden, sehen Sie eine test>-Eingabeaufforderung. Wechseln wir zu einer neuen Datenbank namens salesdb und fügen einige Beispieldaten für Produkte ein. MongoDB erstellt die Datenbank und die Sammlung automatisch, wenn Sie zuerst Daten in diese einfügen.
Kopieren Sie die folgenden Befehle und fügen Sie sie in die mongosh-Shell ein:
use salesdb
db.products.insertMany([
{ category: "Electronics", brand: "Apple", price: 1200 },
{ category: "Electronics", brand: "Samsung", price: 800 },
{ category: "Electronics", brand: "Sony", price: 950 },
{ category: "Apparel", brand: "Nike", price: 150 },
{ category: "Apparel", brand: "Adidas", price: 120 },
{ category: "Books", brand: "Penguin", price: 25 },
{ category: "Books", brand: "Penguin", price: 35 }
]);
Nachdem Sie nun Daten haben, können Sie eine Aggregation durchführen. Der folgende Befehl gruppiert die Dokumente nach dem Feld category und berechnet den Gesamtpreis für jede Kategorie mithilfe des $sum-Akkumulators.
db.products.aggregate([
{
$group: {
_id: "$category",
totalPrice: { $sum: "$price" }
}
}
]);
Beispielausgabe:
[
{ "_id": "Books", "totalPrice": 60 },
{ "_id": "Apparel", "totalPrice": 270 },
{ "_id": "Electronics", "totalPrice": 2950 }
]
Lassen Sie uns die Aggregationsstufe aufschlüsseln:
db.products.aggregate([...]): Dies ist die Methode, die zur Durchführung der Aggregation verwendet wird. Sie nimmt ein Array von Stufen entgegen, die eine Pipeline bilden.
$group: Dies ist der Stufenoperator, der Eingabedokumente gruppiert.
_id: "$category": Dieser Ausdruck gibt den Schlüssel an, nach dem gruppiert werden soll. Hier gruppieren wir nach dem Wert des Feldes category. Das $-Präfix zeigt einen Feldpfad an.
totalPrice: { $sum: "$price" }: Dies ist ein Akkumulator. Er definiert ein neues Feld im Ausgabedokument namens totalPrice. Der $sum-Operator berechnet die Summe des Feldes price für alle Dokumente in der Gruppe.