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.