‫Sprecher: Willkommen zurück.
‫In diesem und dem
‫nächsten Video möchte ich
‫Ihnen die MongoDB-Aggregationspipeline vorstellen, die ein äußerst leistungsstarkes
‫und äußerst nützliches MongoDB-Framework für die
‫Datenaggregation ist.
‫Und die Idee
‫ist, dass wir im Grunde eine Pipeline
‫definieren, die alle Dokumente einer
‫bestimmten Sammlung durchlaufen, wo sie Schritt
‫für Schritt verarbeitet werden, um sie in aggregierte Ergebnisse zu verwandeln.
‫Wir können zum Beispiel die Aggregationspipeline verwenden,
‫um Mittelwerte zu berechnen oder Minimal- und
‫Maximalwerte zu berechnen oder wir können sogar
‫Entfernungen berechnen und wir können wirklich
‫alle möglichen Dinge tun.
‫Es ist wirklich erstaunlich, wie
‫leistungsfähig diese Aggregationspipeline ist.
‫Okay, aber genug geredet.
‫Beginnen wir nun tatsächlich mit der Verwendung der Aggregationspipeline
‫und ich werde hier eine neue Header-Funktion erstellen, da
‫wir später eine neue Route definieren und dann
‫diese Funktion dafür verwenden werden.
‫Aber diese neue Route werde ich später erstellen.
‫Deshalb möchte ich hier eine
‫Funktion erstellen, die ein paar Statistiken über unsere Touren berechnet.
‫Also nenne ich das hier getTourStats.
‫Okay, also Stats for Statistics, und
‫es wird eine
‫asynchrone Funktion sein, und so wird jetzt automatisch ein vs-Code vorausgefüllt.
‫In Ordnung, lassen Sie uns hier einen catch-Block erstellen oder versuchen.
‫Eigentlich kopiere ich das von hier oben,
‫und jetzt werde ich hier eine Variable
‫namens stats erstellen.
‫Jetzt ist die Aggregationspipeline wirklich ein MongoDB-Feature.
‫Aber Mongoose gibt uns natürlich Zugriff
‫darauf, damit wir es im Mongoose-Treiber verwenden können, oder?
‫Wenn Sie also unser Tourmodell verwenden,
‫um auf die Toursammlung zuzugreifen, sagen
‫wir Tour. Aggregat.
‫Die Aggregationspipeline ist also ein
‫bisschen wie eine normale Abfrage, und die Verwendung
‫der Aggregationspipeline ist ein bisschen wie eine normale Abfrage.
‫Der Unterschied besteht darin, dass wir bei Aggregationen,
‫wie ich bereits erwähnt habe, die Daten in
‫mehreren Schritten manipulieren können
‫und wir diese Schritte nun tatsächlich definieren.
‫Und dafür durchlaufen wir eine Reihe von sogenannten Etappen.
‫Wir gehen also in einem Array vorbei, und dann
‫haben wir hier viele Etappen.
‫Und wieder durchlaufen die Dokumente dann nacheinander diese
‫Stufen, Schritt für Schritt in der definierten Reihenfolge, wie
‫wir sie hier definieren.
‫Jedes der Elemente in diesem Array
‫ist also eine der Stufen.
‫Und es gibt eine Menge verschiedener Stufen, aus
‫denen wir wählen können, aber ich werde Ihnen
‫in diesem und auch im nächsten
‫Vortrag nur die gängigsten nennen.
‫Aber wie auch immer, ich
‫möchte mir jetzt kurz die MongoDB-Dokumentation anschauen, weil ich
‫glaube, das haben wir noch nicht gemacht.
‫MongoDB und wir kennen diese Website bereits.
‫Auf unserer MongoDB-Website gehen wir also hierher, um
‫zu lernen, dann die Dokumentation und
‫dann hier das MongoDB-Handbuch auszuwählen, und diese Dokumentation ist riesig.
‫Es hat wirklich eine Menge Zeug hier
‫drin und wenn Sie alles
‫durchgehen würden, nun, dann würden Sie wirklich ein MongoDB-Meister werden.
‫Es gibt Ihnen also eine schöne Einführung in MongoDB, Sie
‫haben die Installation hier.
‫Sie haben die CRUD-Operationen, also eine schöne Übersicht
‫über viele Dinge,
‫die wir bereits zuvor gelernt haben, oder?
‫Dann haben Sie noch einiges über
‫die Aggregation und insbesondere die Aggregationspipeline, über
‫die wir jetzt sprechen
‫werden, aber was ich Ihnen hier wirklich
‫zeigen möchte, ist diese Referenz, die wir unten haben, weil
‫in der Referenz, die wir hier haben
‫Beispiel die Operatoren und dort haben
‫wir viele wichtige Dinge, die wir die ganze Zeit verwendet haben.
‫Schauen wir uns zum Beispiel
‫hier die Abfrageoperatoren an und hier sehen Sie, wir haben diese Operatoren
‫tatsächlich, die wir bereits verwendet haben.
‫Also zum Beispiel größer oder gleich oder kleiner
‫und gleich, aber wenn Sie eines Tages
‫in Ihren eigenen Anwendungen einen anderen Operator benötigen,
‫nun, jetzt wissen Sie, wo Sie ihn finden können.
‫Natürlich ist es auch immer sehr
‫hilfreich, einfach eine schnelle Google-Suche durchzuführen, wahrscheinlich
‫einen Stack-Overflow-Post dazu zu finden, aber glauben Sie mir,
‫oft ist es einfacher und
‫schneller, einfach schnell in die Dokumentation zu springen und schnell nach
‫dem zu suchen, was Sie suchen. wieder brauchen.
‫Sie müssen nur wissen, wie die
‫Dokumentation funktioniert, und wenn Sie das wissen, werden
‫Sie ganz einfach finden, was Sie suchen, in Ordnung?
‫Hier haben Sie auch einige logische
‫Operatoren, zum Beispiel den OR-Operator, den wir bereits verwendet haben.
‫Nochmals, wirklich viele Sachen, Geooperatoren und wir werden später
‫einige verwenden, und ja,
‫wirklich viele Sachen.
‫Was ich Ihnen nach diesem Vortrag dann eigentlich zeigen wollte,
‫sind die Stufen der Aggregation Pipeline.
‫Hier haben Sie also viele davon
‫und was wir in diesem Vortrag hier
‫verwenden werden, ist Match, zum Beispiel und Gruppe,
‫wo ist das?
‫Ja Gruppe, das ist eine sehr wichtige, und wie
‫ich bereits erwähnt habe, werde
‫ich Ihnen die wichtigsten in diesem und im nächsten Vortrag zeigen.
‫Aber auch hier, wenn Sie in einigen Fällen etwas anderes
‫benötigen, dann gehen Sie einfach hierher zu dieser Dokumentation
‫und Sie werden finden, wonach Sie suchen.
‫Gut?
‫Wie auch immer, lassen Sie uns jetzt lernen, wie wir eine
‫dieser Phasen tatsächlich definieren können, in Ordnung?
‫Und ich fange mit Match an.
‫Und Match besteht im Wesentlichen
‫darin, bestimmte Dokumente auszuwählen oder zu filtern.
‫Und so ist es ganz einfach.
‫Es ist wirklich wie ein Filterobjekt in MongoDB, wie
‫wir es so oft verwendet haben.
‫Jede der Stufen ist also ein
‫Objekt und hier kommt der Name der Bühne.
‫Das ist also die Match-Bühne, in Ordnung?
‫Und wie gesagt, es ist wirklich nur eine Abfrage.
‫Nehmen wir also zunächst an, dass wir nur
‫Dokumente auswählen möchten, deren
‫Bewertungsdurchschnitt größer oder gleich 4 ist. 5.
‫Kannst du das also tun?
‫Ich gebe Ihnen nur eine Sekunde, um das hier zu tun.
‫Also ich hoffe du hast es geschafft.
‫Der Durchschnitt der Bewertungen sollte also größer oder
‫gleich 4 sein. 5.
‫Das ist die erste Stufe.
‫Und normalerweise ist diese Spielphase nur eine Vorphase, um sich
‫dann auf die nächsten Phasen vorzubereiten, die bevorstehen.
‫Der nächste ist also nun die Gruppenphase.
‫Also gruppieren und dann
‫dort hinein müssen wir immer nur ein weiteres Objekt übergeben.
‫Es sieht also bei all diesen Objekten irgendwie seltsam aus,
‫aber ja, das haben Sie schon einmal gesehen
‫und MongoDB funktioniert einfach so.
‫Es sind immer Objekte, innerhalb von Objekten, innerhalb von Objekten.
‫Und in dieser Gruppe passiert hier die wahre Magie,
‫denn wie der Name
‫schon sagt, können wir Dokumente zusammenfassen, indem
‫wir im Wesentlichen Akkumulatoren verwenden.
‫Und ein Akkumulator
‫berechnet zum Beispiel sogar einen Durchschnitt.
‫Wenn wir also fünf Touren haben, von denen jede
‫eine Bewertung hat, können wir die durchschnittliche Bewertung mithilfe der Gruppe berechnen.
‫Und genau das machen wir hier.
‫Als erstes müssen wir immer
‫die ID angeben, da wir hier angeben, wonach
‫wir gruppieren möchten.
‫Vorerst sagen wir hier null, weil wir alles
‫in einer Gruppe haben wollen, damit wir die Statistiken
‫für alle Touren zusammen berechnen und nicht
‫nach Gruppen trennen können.
‫Wir werden etwas später dann auch nach verschiedenen Sachen gruppieren, zum
‫Beispiel können wir nach dem Schwierigkeitsgrad gruppieren und
‫wir können dann zum Beispiel den Durchschnitt für die
‫leichten Touren, den Durchschnitt für die mittleren Touren und
‫den Durchschnitt für die schweren Touren berechnen.
‫Wir können also wieder nach einem unserer Felder gruppieren und
‫dieses Feld werden wir hier spezifizieren, aber im
‫Moment wollen wir, wie gesagt, diese Durchschnittswerte für alle
‫Touren zusammen in einer großen Gruppe berechnen.
‫In diesem Fall sagen wir also _id und setzen es auf null.
‫Lassen Sie uns nun die durchschnittliche Bewertung berechnen.
‫Um das zu tun, geben wir einfach
‫ein neues Feld an, also nennen wir es einfach
‫die durchschnittliche Bewertung, also so,
‫und das wird
‫gut, der Durchschnitt, der ein weiterer MongoDB-Operator ist, also dieser hier.
‫Sie finden es in der Referenz, wenn Sie es nachschlagen.
‫Dies ist also ein mathematischer Operator, der
‫den Durchschnitt berechnet und nun den Namen des Feldes.
‫Und wieder weiß ich, dass das sehr seltsam aussehen
‫wird, aber um das Feld anzugeben, aus dem
‫wir den Durchschnitt berechnen möchten, müssen wir das
‫Dollarzeichen verwenden, aber hier und dann in Anführungszeichen
‫den Namen des Felds.
‫Die Bewertungen sind in diesem Fall also durchschnittlich.
‫Und lassen Sie uns auch den Durchschnittspreis berechnen.
‫Also Durchschnittspreis, und wieder, hier falsch gemacht, und so
‫der Durchschnitt
‫und dann wieder der Name
‫des Feldes und in Anführungszeichen und
‫mit diesem Dollarzeichen.
‫Richtig, es sieht also wieder
‫etwas seltsam
‫aus, aber so funktioniert die Aggregationspipeline.
‫Wir haben also den Durchschnittspreis.
‫Lassen Sie uns eigentlich auch den
‫Mindestpreis berechnen, also den kleinsten Preis, und den größten Preis.
‫Also
‫minPrice und von nun an wird alles ähnlich
‫aussehen, also verwenden wir
‫jetzt den min-Operator und dann wieder den Feldnamen wie folgt.
‫Und hier ein Komma und lass uns dieses jetzt
‫einfach duplizieren, um den Höchstpreis zu berechnen.
‫Und jetzt werfen wir einen Blick auf das, was
‫wir zu diesem Zeitpunkt bereits haben.
‫Also müssen wir diese Antwort jetzt tatsächlich aussenden,
‫und deshalb gehe ich
‫noch einmal los und schnappe mir einige dieser bereits erfolgten Antworten hier.
‫Die Daten, die wir versenden möchten, heißen also Statistiken.
‫Und jetzt müssen wir nur noch eine neue Route
‫hier in unsere Tourrouten hinzufügen und wieder werde
‫ich hier ganz oben bearbeiten.
‫Also Router. route
‫/gettour, oder eigentlich nur tour-stats, einfach so, weil das
‫Get bereits in der HTTP-Methode definiert ist.
‫Sie müssen es also nicht im Namen wiederholen.
‫Also tourController. getTourStats.
‫Geben Sie ihm einen Safe und lassen Sie es uns jetzt tatsächlich testen.
‫Ich bin also wirklich aufregend, es jetzt auszuprobieren, tatsächlich zu sehen,
‫ob es funktioniert, denn es ist wieder wirklich ein erstaunliches und wirklich mächtiges
‫Werkzeug, mit dem
‫Sie so viel tun können.
‫Also Tour-Statistiken, schick sie und
‫das ist nicht wirklich das Ergebnis, auf das
‫wir gewartet haben, also ist das nur die Pipeline, die wir
‫definiert haben, aber ich weiß bereits, warum das so ist.
‫Wir haben das Ergebnis also nicht abgewartet.
‫Das ist im Grunde so,
‫wie eine normale Abfrage ein aggregiertes Objekt zurückgibt.
‫So . find wird eine Abfrage zurückgeben, und . Aggregat
‫gibt ein Aggregatobjekt zurück.
‫Und dann erst, wenn wir
‫darauf warten, kommt es tatsächlich mit dem Ergebnis zurück.
‫Deshalb haben wir diese Funktion hier auch als asynchrone Funktion
‫definiert, damit wir dann dort wait verwenden können und
‫hier ist dies der richtige Ort.
‫Versuchen wir es nochmal.
‫Und es geht los!
‫So großartig!
‫Wir haben die durchschnittliche Bewertung aller unserer Touren, wir
‫haben den Durchschnittspreis, den
‫Sie sehen, ist 1563 und dann das Minimum und das Maximum, richtig?
‫Und anhand unserer Daten können
‫wir dies tatsächlich bestätigen.
‫So großartig!
‫Wirklich, wirklich toll.
‫Nun, eine weitere Sache, die ich
‫hier machen möchte, ist, die Gesamtzahl der
‫Bewertungen, die wir haben, und auch die Gesamtzahl der Touren zu berechnen.
‫Also haben wir
‫hier die durchschnittliche Bewertung
‫und lass es uns eigentlich vorher machen,
‫also numRatings, so und du
‫kannst wahrscheinlich erraten, dass diese Summe heißt und dann
‫die BewertungenAverage, oder eigentlich nicht ratingsAverage, sondern ratingsQuantity, oder?
‫Hier wird also die Anzahl der Bewertungen
‫gespeichert, und die Gesamtzahl der Bewertungen ist
‫die Summe all dieser Werte.
‫Und jetzt, die letzte, ist die Anzahl der
‫Touren und diese ist etwas
‫schwieriger, und daher ist es schön, Ihnen hier zu zeigen.
‫Wir wollen also immer noch summieren, also im Grunde
‫alles zusammenaddieren, also verwenden wir immer noch sum,
‫aber was werden wir addieren?
‫Nun, im Grunde fügen wir für jedes Dokument eine
‫hinzu und sagen 1 und das war's.
‫Im Grunde wird also
‫für jedes Dokument, das diese Pipeline
‫durchlaufen wird, eins zu diesem Nummernzähler hinzugefügt.
‫Nennen wir es numTours.
‫Also, ja, testen wir es jetzt noch einmal.
‫Und tatsächlich bekommen wir unsere neun Touren und wissen
‫bereits, dass wir neun haben.
‫Das sind also alle Statistiken für alle Touren zusammen, aber jetzt gehen
‫wir auf die nächste Stufe.
‫Wie ich bereits sagte, können wir jetzt unsere Ergebnisse für
‫verschiedene Bereiche gruppieren.
‫Und fangen wir eigentlich mit der Schwierigkeit an.
‫Das ist also ziemlich ähnlich, als würden Sie die Felder dort
‫unten angeben, die einfach das Dollarzeichen und dann
‫der Name des Felds sind.
‫Also $Schwierigkeit, geben Sie ihm einen Safe und das war's.
‫Senden Sie es hierher, und jetzt haben wir
‫die Statistiken, die für jede dieser drei Schwierigkeiten definiert sind.
‫Das ist also wirklich, wirklich erstaunlich.
‫Das ist also der Teil, der mich umhaut.
‫Es ist absolut fantastisch.
‫Ich meine, Sie können anfangen, alle möglichen
‫Dinge zu sehen, alle Arten
‫von Datenmanipulationen, die Sie mit dieser Pipeline durchführen können, richtig?
‫Wir können also jetzt wirklich anfangen, Dinge zu
‫analysieren, zum Beispiel sehen wir, dass die einfachsten Touren
‫diejenigen sind, die mit einer 4 die
‫schlechtesten Bewertungen erhalten. 6, während die mittleren
‫Touren diejenigen sind, die die höchsten Bewertungen erhalten.
‫Wir können auch sehen, dass
‫die schwierigen Touren mit einem Durchschnittspreis
‫von 1997 die teuersten sind, während die einfachsten mit einem Preis
‫von 1272 auch die günstigsten sind, oder?
‫Wir sehen auch, dass die
‫einfachsten Touren die sind, die wir
‫am meisten haben, also vier leichte und nur zwei schwierige, oder?
‫Damit können wir natürlich
‫alle möglichen Einblicke in unsere Daten gewinnen.
‫Lassen Sie uns
‫diesen hier kommentieren und einfach einen anderen ausprobieren, zum
‫Beispiel nach Bewertungen, warum nicht, probieren wir
‫es einfach aus, sehen wir, was wir bekommen.
‫So haben wir zum Beispiel zwei Touren, also grundsätzlich mit
‫einer Bewertung von 4. 5, wir haben
‫zwei Touren mit 4. 7, eine Tour mit 4. 8, und
‫drei Touren mit 4. 9.
‫Ach ja, und auch hier unten, eine Tour mit 4. 6, und
‫so können wir zum Beispiel hier
‫eine Erkenntnis gewinnen, dass die sehr teuren Touren
‫mit diesem Durchschnittspreis von 1997 extrem gute Bewertungen erhalten.
‫Also alle möglichen Sachen, die wir hier wirklich machen können.
‫Lassen Sie uns diesen loswerden, fügen wir diesen wieder hinzu, und
‫wir können jetzt
‫sogar einige Operationen mit diesem durchführen.
‫Lassen Sie uns diese Schwierigkeit also nur zum Spaß in Großbuchstaben schreiben.
‫Das wird natürlich hier ein weiteres Objekt sein und
‫hier vorne ist der Operator.
‫Daher heißt der Operator in diesem Fall $toUpper.
‫Also nur noch ein weiterer MongoDB-Operator.
‫Also schau es dir an, und jetzt wird es in Großbuchstaben geschrieben.
‫Groß!
‫Wir haben hier also die Gruppenphase, die ziemlich abgeschlossen ist.
‫Versuchen wir es also mit einer anderen, die eine Sortierstufe ist.
‫Also ein weiteres Objekt in unserem Array für eine weitere
‫Stufe, und dieses heißt sortieren.
‫Also sortieren und dann dort hinein, wir brauchen noch ein weiteres Objekt,
‫und es hat dieses irgendwie automatisch vervollständigt, ich weiß nicht
‫warum, und hier können wir jetzt angeben, nach
‫welchem Feld wir dies sortieren möchten, und lass uns das tatsächlich verwenden durchschnittlicher Preis.
‫Und jetzt müssen wir hier bei der Sortierung tatsächlich die Feldnamen
‫verwenden, die wir hier oben in der Gruppe angegeben haben.
‫Wir können die alten Namen nicht mehr verwenden, da sie zu diesem
‫Zeitpunkt bereits weg sind.
‫Sie existieren nicht mehr.
‫An diesem Punkt in der Aggregationspipeline
‫haben wir diese Ergebnisse also wirklich bereits.
‫Das sind nun im Grunde unsere Dokumente.
‫Wenn Sie also nach dem Durchschnittspreis sortieren möchten, ist
‫dies der Feldname, den wir verwenden müssen.
‫Wir können also den Durchschnittspreis
‫sagen und dann 1 für aufsteigend sagen.
‫Also probieren wir das aus.
‫Und ja, tatsächlich.
‫Das ist das niedrigste und das ist das höchste.
‫Groß!
‫Also haben wir viel gemacht.
‫Lassen Sie mich Ihnen nur zeigen, dass wir Etappen auch wiederholen können.
‫Also lassen Sie uns hier tatsächlich ein
‫weiteres Match machen und dieses ist
‫wirklich nur, um Ihnen zu zeigen, dass wir
‫tatsächlich Etappen wiederholen können, und ich möchte Ihnen auch einen anderen Operator zeigen.
‫Lassen Sie uns jetzt nach ID auswählen und daran denken, dass die ID
‫jetzt die Schwierigkeit ist, oder?
‫Also haben wir das hier oben angegeben.
‫Wir wollen also die ID und jetzt einen neuen Operator, den
‫wir noch nicht verwendet haben.
‫Wir wollen, dass es nicht gleich ist, und sagen wir einfach.
‫Und so werden wir
‫einfach alle Dokumente auswählen, die nicht einfach sind.
‫Also in diesem Fall
‫der, der mittel und schwer sagt, oder?
‫Also im Grunde, abgesehen von dem, das einfach sagt, oder?
‫Auch hier ist es
‫nicht wirklich nützlich, da wir dadurch viele unserer aussagekräftigen Daten verlieren, aber
‫nur um Ihnen zu zeigen, dass wir
‫natürlich mehrere Matches durchführen können.
‫In diesem Fall haben wir also einmal gematcht, bevor wir
‫die Gruppe tatsächlich erstellt haben, und dann haben wir gematcht, als wir bereit
‫waren, die Gruppierung durchzuführen.
‫Lassen Sie uns das hier eigentlich
‫aus unserer Aggregationspipeline herausnehmen, aber
‫ich belasse es hier, damit Sie
‫es als Referenz behalten.
‫Versuchen Sie es noch einmal, versuchen Sie es noch einmal,
‫und dies sind unsere Ergebnisse, um
‫unsere Tourstatistiken zu erhalten.
‫Also wirklich schön, wirklich toll.
‫Ich hoffe, Ihnen hat dieses
‫Video gefallen, und im nächsten werden
‫wir die Aggregationspipeline tatsächlich weiter verwenden, um weitere Berechnungen durchzuführen.
‫Und um dir noch ein paar verschiedene Etappen zu zeigen.
‫Also bleib dran.