‫Mann: Hey, da. In diesem Video
‫werden wir also weiter mit der Aggregationspipeline arbeiten.
‫Und ich liebe dieses Video wirklich,
‫weil wir in diesem ein echtes Geschäftsproblem lösen werden.
‫Stellen wir uns also vor, wir entwickeln diese
‫Anwendung wirklich für die Nature's Company.
‫Nehmen wir an, sie bitten
‫uns, eine Funktion zu implementieren, um
‫den geschäftigsten Monat eines bestimmten Jahres zu berechnen.
‫Im Grunde also, indem Sie berechnen,
‫wie viele Touren in jedem Monat des jeweiligen Jahres beginnen.
‫Und diesen Feinschliff braucht das Unternehmen
‫wirklich, um sich auf diese Touren entsprechend vorzubereiten,
‫etwa Tourguides zu engagieren oder die Ausrüstung zu kaufen und
‫all die Dinge so abzuwickeln.
‫Dies ist also ein echtes Geschäftsproblem,
‫das wir jetzt
‫mithilfe von Aggregationspipelines lösen können. Okay?
‫Das wird also eine echte Herausforderung und
‫ich hoffe, es wird wirklich
‫Spaß machen, diese Art von echtem Geschäftsbedarf zu lösen.
‫Zumindest, wenn Nature's ein echtes Geschäft war, denke ich.
‫Beginnen wir also damit,
‫die Funktion erneut zu erstellen.
‫Also exportiere dot und ich nenne
‫es: Monatsplan bekommen.
‫Gut.
‫Und wieder wird es eine asynchrone
‫Funktionsmethode sein, eine Antwort anfordern oder einen Cache-Block versuchen, und ich
‫hätte es tatsächlich von hier
‫oben kopieren können.
‫Aber das macht nichts. Gut.
‫Und ähm, jetzt lasst uns eigentlich auch äh die Route äh
‫genau hier implementieren.
‫Und ich werde diese
‫Zeile einfach duplizieren, also der Monatsplan...
‫Und dann heißt hier
‫dieser: Monatsplan bekommen. Und eigentlich wollen wir in
‫der URL ein Jahr verstreichen lassen. Lassen Sie uns
‫dafür einen URL-Parameter verwenden. Gut.
‫Also äh...
‫Wenn wir hierher zurückkommen, beginnen wir damit,
‫das Jahr zu definieren.
‫Das Jahr kommt also von req dot params dot year.
‫Denken Sie daran und dann
‫noch einmal an diesen Trick, um es in
‫eine Zahl umzuwandeln. Okay?
‫Dann erstelle ich die
‫Planvariable, die auf die Punktaggregation der Tour wartet.
‫Also wie früher und jetzt lasse
‫ich es hier leer.
‫Und ich werde diesen Code kopieren, um
‫dann die Ergebnisse zu senden.
‫Und dieser heißt Plan und in Ordnung.
‫Jetzt können wir unsere Aggregationspipeline genau wie
‫im letzten Video starten.
‫Lassen Sie uns nun zu Beginn einen Blick
‫auf die vollständigen Ergebnisse werfen.
‫Nur damit wir eine bessere Vorstellung
‫davon bekommen, was wir hier eigentlich bauen müssen.
‫Lassen Sie uns also alle Touren abrufen und
‫diese Abfragezeichenfolge vollständig entfernen.
‫Und so haben wir hier alle
‫neun Touren und jede der Touren hat
‫eine Reihe dieser Startdaten.
‫Eine Tour startet also am 25. April 2021.
‫Dann startet der nächste am 20. Juli und dann am
‫5. Oktober. Gut.
‫Dann, äh, der nächste hat dieses
‫Startdatum und ich glaube alle haben drei Startdaten.
‫Okay? Diese Daten benötigen
‫wir also tatsächlich als Ausgangspunkt, um diese
‫Funktion oder diese Aggregationspipeline zu erstellen.
‫Denn denken Sie daran, wir möchten zählen, wie viele Touren es für
‫jeden der Monate in einem bestimmten Jahr gibt.
‫Also analysieren wir 2021, okay?
‫Wir haben eine Tour im April, eine im Juli, eine im Oktober.
‫Dann schauen wir uns die nächste Tour an.
‫Hier haben wir einen im Juni, einen im Juli und einen im August.
‫Im Juli haben wir also schon zwei.
‫Also dieser und dieser.
‫Als nächstes haben wir äh, einen im März, einen im Mai
‫und einen im Juni. Im Juni haben wir also auch schon zwei.
‫Okay? Und so können wir weitermachen
‫und es manuell tun, aber natürlich wollen wir es mit unserer Aggregation tun.
‫Wenn Sie dies alles zusammenfassen
‫möchten, wäre es im Grunde am einfachsten, eine Tour
‫für jeden dieser Termine hier zu haben, oder?
‫Und das können wir tatsächlich mit der Aggregationspipeline tun.
‫Es gibt eine Bühne, um genau das zu tun.
‫Und das nennt man sich entspannen.
‫Also lass es uns jetzt benutzen und
‫ich zeige dir dann äh... das Ergebnis davon und warum wir es wirklich brauchen.
‫Okay? Also definieren wir wieder
‫ein Objekt und dann den Namen der Bühne.
‫Und in diesem Fall heißt es: Entspannen. Okay?
‫Und was unwind tun wird, ist im Grunde genommen
‫ein Array-Feld aus den Info-Dokumenten
‫zu dekonstruieren und dann ein Dokument für jedes Element des Arrays auszugeben.
‫Und das habe ich auch schon gesagt.
‫Das heißt, im Grunde wollen wir für jedes dieser
‫Daten im Array eine Tour haben. Okay?
‫Und diese Phase kann für so viele Fälle wirklich nützlich sein.
‫Das Feld mit dem Array, das wir abwickeln möchten,
‫ist also das Startdatum.
‫Alles klar und das ist jetzt eigentlich alles.
‫Deshalb möchte ich Ihnen jetzt nur das Ergebnis davon zeigen.
‫Und ich denke, wir haben eigentlich schon alles
‫vorbereitet, damit das funktioniert. Denken Sie also daran,
‫dass die Route als Monatsplan und dann als Jahresplan bezeichnet wird.
‫Was vorerst keine Ergebnisse bringen wird,
‫aber ähm, wir müssen es trotzdem definieren.
‫Also Monatsplan und das Jahr 2021.
‫Lassen Sie uns dies jetzt senden.
‫Und tatsächlich haben wir jetzt äh dieses Startdatum nicht mehr
‫als Array, sondern nur dieses erste Element des Arrays,
‫das wir vorher hatten.
‫Stellen wir sie nebeneinander. Und Sie sehen also, wir hatten oder
‫lassen es uns tatsächlich mit dem ersten tun.
‫Wir hatten also den ersten Abnehmer für den
‫25. April, 20. Juli und 5. Oktober.
‫Und jetzt haben wir den ersten Wanderer an diesem Datum hier, dann
‫haben wir den ersten Wanderer am 20. Juli und
‫jetzt haben wir den ersten Wanderer für den 5. Oktober.
‫Also genau das Ergebnis, das
‫wir wollten, denn jetzt haben wir für jeden Termin ein Dokument.
‫Okay? Anstelle von neun haben wir jetzt 27, was
‫neun mal drei ist. Gut.
‫Das ist also das erste Date. Lassen Sie uns nun
‫tatsächlich fortfahren und die Dokumente für das Jahr auswählen, das übergeben wurde.
‫Okay? Und denken Sie daran, welches
‫Stadium wir dafür verwenden, das richtig ist, wir verwenden match.
‫Denken Sie also daran, dass die Übereinstimmung im Wesentlichen darin besteht, Dokumente auszuwählen.
‫Also nur um eine Abfrage zu machen.
‫Und so steht das Jahr in den Startterminen.
‫Wir suchen also nach Startdaten.
‫Also Starttermine, und was wollen wir jetzt?
‫Nun, wir möchten, dass das Datum im Wesentlichen größer als der
‫1. Januar des laufenden Jahres ist,
‫also sagen wir 2021. Und wir wollen, dass
‫es weniger als der 1. Januar 2022 ist, in Ordnung.
‫Im Grunde wollen wir es also 2020 und 2022 sein. Gut?
‫Also lass uns das jetzt in Code schreiben.
‫Also Starttermine und dann brauchen wir noch
‫ein Objekt für die Operatoren. Also, größer oder gleich
‫und in MongoDB funktioniert dies mit Datumsangaben perfekt.
‫Mongo ist also perfekt für die Arbeit
‫mit Daten wie Datumsvergleiche. Es funktioniert also wirklich super.
‫Jetzt müssen wir hier tatsächlich ein neues Datum definieren,
‫damit es mit dem Datum in jedem der Dokumente
‫verglichen werden kann.
‫Die Formel des Datums lautet also Jahr, Monat und Datum.
‫Also lassen Sie uns hier eine Vorlagenzeichenfolge
‫erstellen und unsere Jahresvariable verwenden.
‫Also 1. Januar.
‫Wir möchten, dass unser Datum größer oder
‫gleich dem 1. Januar 2021 ist, und schreiben wir das hier, um es
‫im Hinterkopf zu behalten. Und wir wollen, dass es
‫weniger als gleich ist, oder wir können weniger als gleich sagen.
‫Lassen Sie uns weitermachen und diesen kopieren und dann
‫den 31. Dezember. Okay? Im Grunde möchten wir, dass es
‫zwischen dem ersten Tag des Jahres und dem letzten Tag
‫des laufenden Jahres liegt. Okay?
‫Lassen Sie uns es also weiter testen, also werde ich es
‫jetzt nach jeder der Phasen testen. Also sende dies
‫und jetzt sollten wir hier nur Touren haben, die 2021 sind.
‫Bestätigen wir also 2021, auch hier, hier,
‫auch hier.
‫Mm, du siehst also, wir haben wirklich kein anderes Jahr mehr. Rechts.
‫Es ist immer 2021. Okay? Ich denke, wir haben genug gesehen.
‫Also gehen wir zurück. Als nächstes passiert die Magie.
‫Und das ist normalerweise in der Gruppenphase der Fall.
‫Fügen wir also die Gruppe hier hinzu, also genau wie
‫zuvor so group und denken Sie daran, dass wir das ID-Feld
‫angeben müssen, um anzugeben, was wir zum Gruppieren unserer Dokumente verwenden möchten.
‫Jetzt wollen wir sie nach Monaten gruppieren, oder?
‫Aber derzeit haben wir einfach das
‫gesamte Datum mit Jahr, Monat, Datum und sogar Stunde.
‫Ich schätze, es ist 10 Uhr morgens oder so.
‫Aber auch hier wollen wir nur den Monat. Lassen Sie mich
‫Ihnen also nur einen weiteren magischen MongoDB-Operator zeigen.
‫Also, wo ist das? Also, hier, zurück in
‫dieser Referenz, haben wir tatsächlich ein paar Aggregationspipeline-Operatoren.
‫Und hier drin haben wir diesen wirklich
‫praktischen Date-Operator. Werfen wir also einen Blick darauf.
‫Und die, die wir verwenden werden, ist Monat.
‫Es kehrt also für ein Datum als Zahl zum Monat zurück.
‫Und so wird im Grunde der
‫Monat aus unserem Datum herausgezogen. Und es gibt viele andere Betreiber.
‫So könnten wir zum Beispiel sogar die Woche oder nur
‫das Jahr berechnen, okay?
‫Aber die Woche könnte auch sehr praktisch sein.
‫Aber belassen wir es beim Monat. Gut?
‫Sie können sich also noch einmal
‫diese ähm-- speziellen Aggregationsoperatoren ansehen.
‫Denn davon gibt es eine Menge, wie Sie hier sehen.
‫Okay? Diese Operatoren, die
‫wir hier in der Aggregationspipeline verwenden, sind also genau das.
‫Sie sind Betreiber von Aggregationspipelines.
‫Wir haben Stufen und dann Operatoren, die wir verwenden können. Okay.
‫Und auch in diesem Fall verwenden wir den Monat.
‫Und dann wieder der Name des
‫Feldes, aus dem wir grundsätzlich das Datum extrahieren wollen.
‫In Ordnung, speichern Sie es, dann verschwindet der Fehler, okay.
‫Also gruppieren wir es jetzt nach Monat.
‫Und nun ist die eigentliche Information,
‫die wir für jeden Monat benötigen, wie viele Touren in diesem Monat beginnen?
‫Rechts? Und dafür werden wir im
‫Grunde nur die Anzahl der Touren zählen, die einen bestimmten Monat haben, oder?
‫Also Anzahl der Touren beginnt.
‫Und so ist dieses hier tatsächlich sehr
‫ähnlich zu dem, was wir zuvor gemacht haben.
‫Also verwenden wir add und fügen dann für jedes
‫der Dokumente eines hinzu. Also genau wie wir es zuvor getan haben.
‫Aber eigentlich ist es Summen und nicht Addieren, okay, also wie hier, als wir
‫die Touren für jede der Schwierigkeiten gezählt haben, haben wir einfach
‫die Nummer eins für jedes der Dokumente addiert.
‫Und hier machen wir dasselbe.
‫Alles klar, also lass uns das nochmal testen.
‫Und wir sind unserem Endergebnis schon sehr nahe.
‫Und tatsächlich, los geht's. Wir haben also den Februar mit einer Tour.
‫Dezember mit einer Tour, wir haben November oder eigentlich
‫September mit zwei Touren.
‫Und dann haben wir zwei Touren in all
‫dem hier drin, eigentlich haben wir drei Touren im Juli.
‫Das kommt unserem Ergebnis also ziemlich nahe.
‫Das ist also absolut fantastisch.
‫Dieser Teil hier, der meiner Meinung nach der schwierigste
‫war, funktioniert bereits.
‫Gut.
‫Jetzt wollen wir eigentlich noch ein paar
‫Informationen, nicht nur wie viele Touren,
‫sondern auch welche Touren? Also machen wir das.
‫Wenn Sie also wissen möchten, welche Touren eigentlich
‫ein Array sein sollten.
‫Rechts? Denn wie sonst
‫würden wir zwei oder drei verschiedene Touren in einem Feld spezifizieren, oder?
‫Im Grunde wollen wir also ein Array erstellen,
‫und wir tun dies, indem wir push
‫verwenden, und was wir dann in dieses Array
‫schieben, während jedes Dokument diese Pipeline durchläuft, ist
‫einfach der Name des Dokuments
‫oder eigentlich das Namensfeld. Also nicht der Name des Dokuments
‫sondern das Namensfeld.
‫In diesem Fall also der Name der Tour. Okay, dann testen wir es.
‫Und...
‫bam, los geht's!
‫So haben wir jetzt auch die Namen der Touren drin.
‫So fantastisch. Mal sehen, ja. Hier haben wir alle drei.
‫Als nächstes ändern wir den Namen
‫dieses Felds hier, okay?
‫Jetzt nicht wirklich ändern, aber wir fügen einfach ein
‫weiteres Feld hinzu, das hier den gleichen
‫Wert hat, damit wir diese ID später grundsätzlich löschen können.
‫Okay, und dafür verwenden wir die nächste Stufe, die
‫heißt: Feld hinzufügen.
‫Fügen Sie also ein Feld hinzu
‫und dieses ist ziemlich einfach. Es tut einfach, was es sagt.
‫Add field wird also zum Hinzufügen von Feldern verwendet und
‫heißt eigentlich Felder hinzufügen.
‫Und so heißt der Name, den wir hinzufügen möchten, oder
‫das Feld heißt Monat und hat den Wert des
‫Felds mit der Namens-ID.
‫Gut. Also ganz einfach
‫den Namen des Feldes und dann den Wert.
‫Wobei wir wie üblich das Dollarzeichen verwenden müssen.
‫Alles klar, nur um es noch einmal zu testen.
‫Tatsächlich haben wir jetzt den Monat.
‫Als nächstes wollen wir dies tatsächlich loswerden und verwenden
‫daher project.
‫Ich versuche also wirklich, hier so viele Bühnen wie möglich zu platzieren, um
‫Ihnen wirklich alles zu zeigen, was ich kann.
‫Wie funktioniert das Projekt? Nun, wir geben
‫einfach jedem der Feldnamen eine Null oder eine Eins.
‫Also lass mich dir das zeigen. Wir können also ID sagen und
‫auf Null setzen. Und das führt dann dazu,
‫dass die ID nicht mehr angezeigt wird. Wenn ich hier eine
‫einse, naja, dann würde sie tatsächlich auftauchen, okay?
‫Also dieses hier werde ich nicht testen. Lassen Sie mich nur die nächste
‫hinzufügen, die die Sortierung ist, von der ich glaube, dass ich sie zuvor verwendet habe, aber
‫ich möchte sie hier immer noch nach Anzahl oder Touren sortieren.
‫Okay, im Moment ist es nicht 100% nützlich, das wir noch vermissen,
‫weil wir es eigentlich nach der Anzahl der
‫Tourstarts sortieren sollten.
‫Der Name des Feldes ist also die Anzahl der Tourstarts und äh,
‫wir hatten vorher einen für aufsteigend und minus einen für
‫absteigend, und das ist natürlich das, was
‫wir wollen.
‫Beginnen Sie also mit der höchsten Zahl.
‫In unserem Fall sollten es also drei sein und ja, das ist es.
‫Der Juli ist also der geschäftigste Monat mit drei Tourstarts, dem
‫Forest Hiker, dem Sea Explorer und dem Sports Lover.
‫Okay, das ist sozusagen erledigt.
‫Lassen Sie mich Ihnen nur eine, äh, letzte Stufe hier zeigen,
‫die hier nicht wirklich hilfreich ist, aber ich
‫wollte sie Ihnen trotzdem zeigen.
‫Wir haben also das Limit, und dieses ist genau das gleiche wie
‫das Limit in der uh-Abfrage. Im Grunde wird es uns
‫also nur erlauben, hier sechs Dokumente zu haben.
‫Okay, also im Grunde sechs Ausgänge.
‫Okay, testen wir das, und jetzt sollten wir tatsächlich nur
‫sechs haben.
‫Eins, zwei, drei, vier, fünf und sechs. Gut.
‫Nochmals, nicht wirklich nützlich, weil das die sechs am wenigsten
‫größten Monate abschneidet, was wir nicht wollen.
‫Stellen wir es hier einfach auf
‫12 ein, damit wir es hier als Referenz für Sie belassen können.
‫In Ordnung, also noch einmal, aber es sollte jetzt funktionieren
‫und das eigentliche Geschäftsproblem ist jetzt gelöst.
‫Und ich weiß, das sind ziemlich viele bewegende Stücke, die
‫wir hier haben. Viele verschiedene Stadien.
‫Und deshalb weiß ich, dass Sie in diesem Moment viel zu tun haben.
‫Aber keine Sorge, Sie müssen nicht alle diese
‫Dinge gleichzeitig wissen.
‫Mit etwas Übung werden Sie sich weiter verbessern und
‫wissen, wann Sie welches der Werkzeuge, die Ihnen
‫zur Verfügung stehen, einsetzen müssen.
‫Denken Sie nur daran, dass Sie neben
‫diesem Kurs immer die Dokumentation lesen können, die eine Art vollständiges
‫und wirklich großartiges Lernmaterial ist, okay?
‫Und das gilt für alle Technologien, die
‫wir hier lernen.
‫Daher empfehle ich Ihnen wirklich, die Dokumentation immer zu studieren.
‫Und ich weiß, es kann wirklich erschreckend sein, es anzusehen und ohne
‫diesen Kurs wäre es viel schwieriger, aus der Dokumentation
‫zu lernen, aber mit
‫dieser wirklich guten Ausgangsbasis, die Sie
‫in diesen Videos erhalten, ist es für Sie
‫dann viel einfacher, sie zu behalten
‫Ich lerne immer mehr, äh, mit dieser Dokumentation, okay?
‫Von daher würde ich natürlich nicht erwarten, dass Sie
‫diese Herausforderung alleine lösen, weshalb wir es hier im Grunde
‫gemeinsam gemacht haben, oder?
‫Aber ich hoffe, Sie hatten genauso viel Spaß
‫wie ich, denn ich liebe es, diese Art von Problemen zu lösen. Es
‫macht wirklich Spaß, denke ich.
‫Aber egal, jetzt genug geredet.
‫Im Rest des Abschnitts werden wir jetzt
‫über ein paar äh, andere Funktionen sprechen, die uns in Mongo
‫zur Verfügung stehen, also sollte das auch ziemlich Spaß machen.