Dieses Kapitel führt in die MongoDB-Aggregations-Pipeline ein, die hauptsächlich für die statistische Analyse verwendet wird, ähnlich der group by-Anweisung in SQL. In der MongoDB-Shell wird die statistische Analyse durch die Funktion db.collection.aggregate() erreicht.

Konzept

Die Aggregations-Pipeline ist ein abstraktes Konzept, das Daten wie Wasser behandelt, das durch eine Pipeline fließt. Wir können die Daten in mehreren Stufen innerhalb der Pipeline verarbeiten. Nachdem eine Stufe die Daten verarbeitet hat, werden die verarbeiteten Ergebnisse an die nächste Stufe zur weiteren Verarbeitung übergeben.

Beispiele für die Anwendung der Aggregations-Pipeline in der statistischen Analyse:

  • In der ersten Stufe wird eine Charge von Dokumentendaten aus der Sammlung basierend auf bestimmten Bedingungen abgerufen.
  • In der zweiten Stufe werden die abgerufenen Dokumentendaten gruppiert und aggregiert.
  • In der dritten Stufe werden die aggregierten Daten aus der zweiten Stufe sortiert.

Der gesamte Prozess ähnelt einer Pipeline-Operation, bei der Daten von einem Ende der Pipeline einfließen, durch mehrere Stufen verarbeitet werden und dann ein Endergebnis ausgegeben wird.

Von der MongoDB-Pipeline unterstützte Operatoren

Hier sind gängige Pipelineselektoren, die von MongoDB unterstützt werden:

Operator Beschreibung
$match Die $match-Stufe wird verwendet, um Dokumentendaten basierend auf Bedingungen zu filtern, ähnlich der where-Bedingung in SQL.
$group Die $group-Stufe wird verwendet, um Dokumentendaten zu gruppieren und zu aggregieren, ähnlich der group by-Klausel in SQL.
$sort Wird verwendet, um die Daten zu sortieren.

Schritte zur Verwendung der Aggregations-Pipeline

Typischerweise sind drei Schritte erforderlich:

  • Filtern der Ziel-Daten mit $match.
  • Gruppieren und Aggregieren der Daten mit $group.
  • Ergebnisse mit $sort sortieren (optional).

Beispiel:

db.orders.aggregate([
                     { $match: { status: "A" } },
                     { $group: { _id: "$cust_id", total: { $sum: "$amount" } } },
                     { $sort: { total: -1 } }
                   ])

Äquivalentes SQL:

select sum(amount) as total from orders 
		where status="A" 
		group by cust_id 
		order by total desc

Hinweis: Weitere Informationen zur statistischen Analyse über Aggregat-Operationen finden Sie in den nachfolgenden Kapiteln.