MongoDB-Daten zusammenfassen

MongoDBBeginner
Jetzt üben

Einführung

In diesem Lab lernen Sie, wie Sie grundlegende Aggregationsoperationen in MongoDB durchführen. Diese Operationen ermöglichen es Ihnen, Daten zu verarbeiten und berechnete Ergebnisse zurückzugeben. Sie lernen, Summen zu berechnen, Minimum- und Maximumwerte zu finden, Dokumente zu zählen und Durchschnittswerte zu ermitteln. Das Lab verwendet eine Beispiel-Collection namens bookstore, um die Leistungsfähigkeit des Aggregations-Frameworks von MongoDB zur Gewinnung aussagekräftiger Erkenntnisse aus Ihren Daten zu demonstrieren.

Daten verbinden und befüllen

Bevor wir Daten zusammenfassen können, müssen wir uns mit dem MongoDB-Server verbinden und einige Beispieldaten einfügen. In diesem Schritt starten Sie die MongoDB Shell, erstellen eine Datenbank und befüllen eine Collection mit Buchinformationen.

Öffnen Sie zunächst Ihr Terminal und starten Sie die MongoDB Shell (mongosh):

mongosh

Sie befinden sich nun in der MongoDB Shell, die es Ihnen ermöglicht, mit Ihren Datenbanken zu interagieren. Wechseln wir zu einer neuen Datenbank namens bookstore. Wenn die Datenbank nicht existiert, erstellt MongoDB sie für Sie, sobald Sie Daten speichern.

use bookstore

Als Nächstes fügen wir mehrere Buchdokumente in eine Collection namens books ein, indem wir die Methode insertMany() verwenden. Jedes Dokument ist ein JSON-Objekt, das einen title, einen price und eine quantity enthält.

db.books.insertMany([
  { title: "Python Basics", price: 29.99, quantity: 50 },
  { title: "MongoDB Essentials", price: 39.99, quantity: 30 },
  { title: "Data Science Guide", price: 45.5, quantity: 25 },
  { title: "Web Development", price: 34.75, quantity: 40 }
]);

Sie sollten eine Ausgabe sehen, die bestätigt, dass die Dokumente erfolgreich eingefügt wurden.

Um zu überprüfen, ob die Daten hinzugefügt wurden, können Sie die Methode find() verwenden, um alle Dokumente in der books-Collection abzurufen und anzuzeigen.

db.books.find();

Die Ausgabe listet die vier gerade eingefügten Dokumente auf, wobei jedes eine eindeutige _id von MongoDB zugewiesen bekommt.

[
  {
    _id: ObjectId("..."),
    title: 'Python Basics',
    price: 29.99,
    quantity: 50
  },
  {
    _id: ObjectId("..."),
    title: 'MongoDB Essentials',
    price: 39.99,
    quantity: 30
  },
  {
    _id: ObjectId("..."),
    title: 'Data Science Guide',
    price: 45.5,
    quantity: 25
  },
  {
    _id: ObjectId("..."),
    title: 'Web Development',
    price: 34.75,
    quantity: 40
  }
]

Nachdem unsere Collection nun eingerichtet ist, können wir mit den Aggregationsoperationen fortfahren.

Gesamtwerte berechnen

In diesem Schritt lernen Sie, wie Sie Gesamtsummen mit dem Aggregations-Framework von MongoDB berechnen. Aggregations-Pipelines verarbeiten Daten durch eine Reihe von Stufen (Stages). Wir verwenden die $group-Stufe, um Dokumente zu gruppieren, und den $sum-Operator, um Berechnungen durchzuführen.

Beginnen wir mit der Berechnung der Gesamtanzahl der Bücher, die sich über alle Titel hinweg auf Lager befinden. Wir gruppieren alle Dokumente in einer einzigen Gruppe und summieren deren quantity-Felder.

db.books.aggregate([
  {
    $group: {
      _id: null,
      totalQuantity: { $sum: "$quantity" }
    }
  }
]);

Hier ist eine Aufschlüsselung des Befehls:

  • db.books.aggregate([...]): Initiiert eine Aggregations-Pipeline für die books-Collection.
  • $group: Die Stufe, die Eingabedokumente gruppiert.
  • _id: null: Gibt an, dass alle Dokumente in der Collection zu einem einzigen Ausgabedokument zusammengefasst werden sollen.
  • totalQuantity: { $sum: "$quantity" }: Definiert ein neues Feld totalQuantity. Der $sum-Operator berechnet die Summe des quantity-Feldes (mit $ präfixiert) für alle Dokumente in der Gruppe.

Die erwartete Ausgabe ist:

[{ "_id": null, "totalQuantity": 145 }]

Als Nächstes berechnen wir den gesamten Lagerwert aller Bücher zusammen. Dazu müssen wir für jedes Buch den price mit der quantity multiplizieren und dann die Ergebnisse summieren.

db.books.aggregate([
  {
    $group: {
      _id: null,
      totalBookValue: { $sum: { $multiply: ["$price", "$quantity"] } }
    }
  }
]);

In dieser Pipeline:

  • $multiply: ["$price", "$quantity"]: Dieser Ausdruck multipliziert die Felder price und quantity für jedes Dokument.
  • $sum: Dieser Operator addiert dann die Ergebnisse der Multiplikation für alle Dokumente.

Die erwartete Ausgabe ist:

[{ "_id": null, "totalBookValue": 5226.7 }]

Minimum- und Höchstwerte finden

Das Finden von Minimum- und Maximumwerten in einem Datensatz ist eine gängige Analysepraxis. In diesem Schritt verwenden Sie die Aggregationsoperatoren $min und $max, um die günstigsten und teuersten Bücher in unserer Collection zu finden.

Ähnlich wie $sum werden die Operatoren $min und $max innerhalb der $group-Stufe verwendet. Erstellen wir eine einzige Aggregations-Pipeline, um sowohl die niedrigsten als auch die höchsten Buchpreise zu ermitteln.

db.books.aggregate([
  {
    $group: {
      _id: null,
      lowestPrice: { $min: "$price" },
      highestPrice: { $max: "$price" }
    }
  }
]);

Diese Pipeline funktioniert wie folgt:

  • _id: null: Gruppiert alle Dokumente zusammen.
  • lowestPrice: { $min: "$price" }: Erstellt ein Feld lowestPrice und setzt dessen Wert auf den Minimalwert des price-Feldes über alle Dokumente hinweg.
  • highestPrice: { $max: "$price" }: Erstellt ein Feld highestPrice und setzt dessen Wert auf den Maximalwert des price-Feldes.

Die erwartete Ausgabe zeigt die in der Collection gefundenen Minimum- und Maximumpreise:

[{ "_id": null, "lowestPrice": 29.99, "highestPrice": 45.5 }]

Sie können die gleiche Logik auf andere numerische Felder anwenden. Um beispielsweise die minimale und maximale Lagerbestandsmenge zu ermitteln, würden Sie $min und $max auf das quantity-Feld anwenden.

db.books.aggregate([
  {
    $group: {
      _id: null,
      lowestQuantity: { $min: "$quantity" },
      highestQuantity: { $max: "$quantity" }
    }
  }
]);

Die erwartete Ausgabe für diese Abfrage ist:

[{ "_id": null, "lowestQuantity": 25, "highestQuantity": 50 }]

Dokumente zählen und Durchschnittswerte berechnen

In diesem Schritt lernen Sie zwei weitere nützliche Zusammenfassungstechniken kennen: das Zählen von Dokumenten und die Berechnung von Durchschnittswerten. Wir werden sowohl eine einfache Zählmethode als auch das Aggregations-Framework für komplexere Szenarien untersuchen.

Zuerst zählen wir die Gesamtzahl der Dokumente in unserer books-Collection. Die Methode countDocuments() ist der einfachste Weg, dies zu tun.

db.books.countDocuments();

Die Ausgabe wird eine einzelne Zahl sein:

4

Sie können countDocuments() auch einen Query-Filter übergeben, um nur die Dokumente zu zählen, die bestimmten Kriterien entsprechen. Zählen wir zum Beispiel, wie viele Bücher einen Preis von über 35 $ haben.

db.books.countDocuments({ price: { $gt: 35 } });

Der Operator $gt steht für "größer als" (greater than). Die Ausgabe wird sein:

2

Als Nächstes berechnen wir den durchschnittlichen Buchpreis mithilfe des Aggregations-Frameworks. Der Operator $avg, der innerhalb einer $group-Stufe verwendet wird, berechnet den Durchschnitt eines numerischen Feldes.

db.books.aggregate([
  {
    $group: {
      _id: null,
      averagePrice: { $avg: "$price" }
    }
  }
]);

Diese Pipeline gruppiert alle Dokumente und berechnet den Durchschnitt des price-Feldes. Die Ausgabe wird sein:

[{ "_id": null, "averagePrice": 37.56 }]

Das Aggregations-Framework bietet eine leistungsstarke und flexible Möglichkeit, Berechnungen wie Zählen und Durchschnittsbildung durchzuführen, insbesondere wenn es mit anderen Stufen kombiniert wird, um komplexere Logik zu handhaben.

Zusammenfassenden Bericht erstellen

In diesem letzten Schritt kombinieren Sie mehrere Aggregationsstufen, um einen komplexeren Zusammenfassungsbericht zu erstellen. Dies zeigt, wie Sie Operatoren miteinander verketten können, um aufschlussreiche Ansichten Ihrer Daten zu erstellen. Wir erstellen einen Bericht, der Bücher in die Preiskategorien "Budget" und "Premium" einteilt und für jede Kategorie zusammenfassende Statistiken berechnet.

Unser Ziel ist es, Bücher nach ihrem Preis zu gruppieren und dann die Anzahl der Titel, die Gesamtmenge, den Gesamtwert und den Durchschnittspreis für jede Gruppe zu berechnen.

Führen Sie die folgende Aggregations-Pipeline aus:

db.books.aggregate([
  {
    $group: {
      _id: {
        $cond: {
          if: { $lt: ["$price", 35] },
          then: "Budget",
          else: "Premium"
        }
      },
      totalBooks: { $sum: 1 },
      totalQuantity: { $sum: "$quantity" },
      totalValue: { $sum: { $multiply: ["$price", "$quantity"] } },
      avgPrice: { $avg: "$price" }
    }
  }
]);

Lassen Sie uns diese leistungsstarke Pipeline aufschlüsseln:

  • $group: Diese Stufe ist das Herzstück unseres Berichts.
  • _id: { $cond: ... }: Anstelle von null verwenden wir den $cond (bedingten) Operator, um die Gruppen-ID dynamisch zu bestimmen. Wenn der price eines Buches kleiner als ($lt) 35 ist, wird es der Gruppe "Budget" zugeordnet; andernfalls ist es "Premium".
  • totalBooks: { $sum: 1 }: Dies ist eine gängige Technik, um Dokumente innerhalb einer Gruppe zu zählen. Für jedes Dokument wird 1 zur Gesamtsumme addiert.
  • totalQuantity, totalValue, avgPrice: Dies sind dieselben Akkumulatoren, die Sie in früheren Schritten gelernt haben, aber jetzt operieren sie innerhalb jeder Preiskategorie.

Die Ausgabe liefert eine übersichtliche Zusammenfassung für jede Kategorie. Beachten Sie, dass die Reihenfolge der Dokumente variieren kann.

[
  {
    "_id": "Premium",
    "totalBooks": 2,
    "totalQuantity": 55,
    "totalValue": 2212.75,
    "avgPrice": 42.745
  },
  {
    "_id": "Budget",
    "totalBooks": 2,
    "totalQuantity": 90,
    "totalValue": 2984.5,
    "avgPrice": 32.37
  }
]

Dieses Beispiel zeigt, wie das Aggregations-Framework verwendet werden kann, um Rohdaten direkt in der Datenbank in strukturierte, aussagekräftige Berichte umzuwandeln.

Zusammenfassung

In diesem Lab haben Sie die Grundlagen der Datenaggregation in MongoDB gelernt. Sie haben mit der Verbindung zu einer Datenbank begonnen und eine Collection mit Beispieldaten gefüllt. Anschließend haben Sie das Aggregations-Framework verwendet, um mehrere gängige Zusammenfassungsaufgaben durchzuführen. Sie haben gelernt, wie Sie die $group-Stufe mit Operatoren wie $sum zur Berechnung von Summen, $min und $max zum Finden von Grenzwerten und $avg zur Berechnung von Durchschnittswerten verwenden. Sie haben auch die Verwendung von countDocuments() für einfache Zählungen geübt und gesehen, wie Sie durch die Kombination mehrerer Operatoren und Stufen einen facettenreichen Zusammenfassungsbericht erstellen können. Diese Fähigkeiten sind unerlässlich für die Analyse von Daten und das Gewinnen wertvoller Erkenntnisse aus Ihren MongoDB-Collections.