‫-: Die Filterfunktion, die
‫wir gerade implementiert haben, funktioniert also bereits großartig, aber
‫in diesem Video möchten wir es auf die nächste Stufe
‫bringen, indem wir noch komplexere Abfragen zulassen.
‫Im Moment kann ein Benutzer die Dokumente also
‫nur filtern, indem er einen Schlüssel gleich einem Wert setzt, oder?
‫Aber jetzt wollen wir
‫eigentlich auch die Operatoren größer als, größer
‫oder gleich, kleiner als und kleiner gleich als Operatoren implementieren.
‫Anstatt also nur gleich
‫zu sein, möchten wir zum Beispiel tatsächlich in der
‫Lage sein, Dauer größer oder gleich fünf und
‫nicht nur gleich zu sagen, in Ordnung?
‫Und das macht alles etwas komplexer.
‫Bevor ich Code schreibe, werde ich die
‫Abfrage tatsächlich so schreiben, wie sie
‫in MongoDB aussehen soll.
‫Wie würde das Filterobjekt eigentlich aussehen?
‫Und lass es uns hier als Kommentar
‫schreiben und wieder nur als Übung.
‫Das Objekt würde also ungefähr so aussehen,
‫also Schwierigkeit, beginnen Sie damit, stellen Sie einfach und dann Dauer
‫ein; Und jetzt denken Sie daran, dass wir,
‫wenn wir einen Operator verwenden möchten, ein anderes Objekt starten müssen.
‫Und dann verwenden wir es für
‫den Größer-oder-Gleich-als-Operator so, bis fünf, richtig, erinnern Sie sich daran?
‫So würden wir das Filterobjekt
‫für die gerade angegebene Abfrage manuell schreiben.
‫Kehren wir nun tatsächlich zu Postman
‫zurück, damit ich Ihnen eine Art Standardmethode zum
‫Schreiben einer Abfragezeichenfolge einschließlich dieser Operatoren zeigen kann.
‫Und wir machen das so, also öffnen wir vor
‫dem Gleichheitszeichen die Klammern und dann
‫schreiben wir hier den Operator, also in
‫diesem Fall größer oder gleich, und das war's.
‫Und im Grunde fügen wir dem Schlüssel-Wert-Paar einen dritten
‫Teil hinzu, also haben wir den
‫Schlüssel, den Wert und jetzt auch den Operator.
‫Und wir verwenden diese Klammern wieder,
‫um den Operator anzugeben.
‫Das ist also wieder eine
‫Standardmethode und lassen
‫Sie uns jetzt einen Blick auf die Abfragezeichenfolge werfen,
‫die Express uns gibt,
‫und wie zuvor, protokollieren wir tatsächlich
‫eine Reg Dot-Abfrage in der Konsole, log Reg Dot-Abfrage, alle rechts.
‫Schauen wir uns also an, wie unser
‫Abfrageobjekt aussehen wird, wenn
‫wir die Abfragezeichenfolge wie folgt angeben.
‫In Ordnung, jetzt fällt Ihnen als erstes auf, dass
‫wir hier einen Fehler erhalten, aber
‫machen Sie sich darüber erst einmal keine Sorgen.
‫Was mich hier interessiert, ist dieses Objekt, und lassen
‫Sie mich es hierher kopieren.
‫Alles klar, was fällt dir hier auf?
‫Nun, was wir hier sehen, ist, dass
‫das Abfrageobjekt fast identisch mit
‫dem von uns manuell geschriebenen Filterobjekt aussieht,
‫der einzige Unterschied besteht darin, dass wir hier das MongoDB-Operatorzeichen haben.
‫Das ist also wirklich das
‫Einzige, was hier vor diesem Betreibernamen fehlt.
‫Okay, und die Lösung
‫dafür besteht darin, im Grunde alle Operatoren
‫wie diese durch ihre entsprechenden MongoDB-Operatoren
‫zu ersetzen, also im Grunde dieses Dollarzeichen hier hinzuzufügen, okay.
‫Also lasst uns das jetzt implementieren, und tatsächlich
‫machen wir es irgendwo hier oben, lasst uns
‫hier noch ein paar Kommentare hinzufügen.
‫Also Filterung, die wir in der letzten Vorlesung gemacht haben,
‫jetzt fügen wir etwas erweiterte Filterung hinzu, und das
‫ist der Code, den wir jetzt schreiben werden.
‫Nun lasst uns diesen Code hier ganz oben einfügen, in Ordnung.
‫Dann brauchen wir diesen Code hier nicht wirklich, aber ich möchte
‫ihn trotzdem hier behalten,
‫also lass ihn uns hier am Ende platzieren.
‫Und dann nur dieser Code hier als Referenz, um sicherzustellen,
‫dass wir wissen, was wir hier tun.
‫Alles klar, und jetzt, da wir wissen,
‫was wir hier tun müssen,
‫ist es eigentlich nur ein einfaches Javascript-Problem.
‫Und ich löse es
‫so, also werde ich zuerst das Objekt in
‫eine Zeichenfolge konvertieren, damit die Abfragezeichenfolge dem JSON-Punkt-Stringify des Abfrageobjekts entspricht, und
‫jetzt kann ich diese Abfragezeichenfolge verwenden, um die
‫Ersetzungsfunktion darauf zu verwenden .
‫In Ordnung, und was ich jetzt
‫also ersetzen möchte, ist das gte durch das Dollarzeichen gte und
‫dann noch einen anderen Operator.
‫Diejenigen, die wir ersetzen
‫möchten, sind also größer oder gleich, größer
‫als, kleiner oder gleich und kleiner als, und es gibt
‫mehrere Möglichkeiten, dies zu tun, aber
‫ich werde einen regulären Ausdruck verwenden.
‫Und für mich persönlich sind reguläre
‫Ausdrücke eines der schwierigsten Konzepte in Javascript
‫und überhaupt in der Programmierung.
‫Wenn ich so etwas tun
‫muss, gehe ich normalerweise einfach auf Stack Overflow oder google einfach
‫herum, um die richtige Lösung für das Problem
‫zu finden, das ich zu lösen versuche.
‫Was wir jetzt also
‫tun möchten, ist, im Wesentlichen eines dieser vier Wörter zuzuordnen und
‫es dann durch dieselben Wörter zu
‫ersetzen, jedoch mit dem Dollarzeichen davor.
‫Der reguläre Ausdruck,
‫um eines dieser vier Wörter zu finden, sieht also so
‫aus; Also öffnen wir diese Klammern und schreiben dann die
‫Operatoren, also gte oder gt oder lte oder lt.
‫Und dann müssen wir dieses \b auch davor und danach hinzufügen, und das liegt daran,
‫dass wir nur diese genauen Wörter abgleichen möchten.
‫Stellen Sie sich also vor, es gibt ein Wort, das
‫lt enthält, dann wollen wir natürlich nicht
‫abgleichen, dass wir nur dann abgleichen möchten, wenn es genau dieses Wort
‫ist, ohne dass es eine andere Zeichenfolge darum gibt.
‫Und dieser reguläre Ausdruck, den ich hier
‫habe, wird sich darum kümmern,
‫und tatsächlich fehlt ein Stück und das ist dieses g-Flag hier,
‫was bedeutet, dass es tatsächlich mehrmals vorkommen wird.
‫Wenn wir also zwei oder drei
‫Operatoren oder sogar alle haben, werden sie alle ersetzt.
‫Und ohne dieses g hier würde
‫es nur das erste Vorkommen ersetzen, daher ist dieses sehr wichtig.
‫Wodurch wollen wir es nun eigentlich ersetzen?
‫Nun, die Methode replace
‫akzeptiert tatsächlich einen Callback, der sehr mächtig ist, und
‫dieser Callback hat als erstes Argument
‫das übereinstimmende Wort oder die übereinstimmende Zeichenfolge.
‫Wir können also match an diese Callback-Funktion übergeben und
‫von diesem Callback geben wir die neue Zeichenfolge
‫zurück, die die alte ersetzt, okay?
‫Lassen Sie uns hier also eine
‫Vorlagenzeichenfolge erstellen, und
‫wir möchten die Übereinstimmung durch eine Übereinstimmung mit dem Dollarzeichen ersetzen. Okay,
‫das ist also der Teil der Vorlagenzeichenfolgensyntax.
‫Das hier ist also diese Übereinstimmung, und dann
‫wollen wir das Dollarzeichen davor setzen.
‫Und jetzt, um sicherzugehen, protokollieren
‫wir es tatsächlich in der Konsole und möchten das
‫Objekt tatsächlich zurück, also analysiert JSON die Abfragezeichenfolge.
‫In Ordnung, lassen Sie mich das hier klären, damit
‫Sie die Ergebnisse etwas besser sehen können.
‫Auch hier erhalten wir
‫diesen Fehler und das liegt natürlich daran,
‫dass MongoDB den Abfragestring oder das Abfrageobjekt,
‫wie wir es gerade haben, nicht wirklich verwenden kann.
‫Und hier haben wir die
‫beiden Ergebnisse und Sie sehen tatsächlich, dass unser Ergebnis
‫genau das gleiche ist wie zuvor
‫und etwas hier eindeutig nicht funktioniert.
‫Versuchen wir also herauszufinden, was das ist.
‫Und hier sieht der reguläre Ausdruck ganz gut aus,
‫hier sieht alles gut aus, ah, aber
‫okay, das Problem ist, dass ich ihn im String ersetze,
‫aber dann nirgendwo speichere.
‫Und eigentlich wollen wir es zurück in die Abfragezeichenfolge speichern.
‫Also ändern wir dies
‫hier in ein let, damit es dann
‫die Daten mutieren kann und sagen wir, Abfragestring, oh sorry.
‫Abfragezeichenfolge entspricht also der ersetzten Abfragezeichenfolge, genau wie zuvor, also
‫habe ich einfach vergessen, das Ergebnis hier tatsächlich wieder
‫in der Variablen zu speichern.
‫Versuchen wir es noch einmal, und jetzt funktioniert es.
‫Jetzt haben wir also
‫das Dollarzeichen vor dem Operator, großartig.
‫Okay, also es funktioniert, lasst uns diese Kommentare hier und jetzt endlich
‫loswerden, alles was wir tun müssen ist hier
‫eigentlich nicht das Abfrageobjekt zu verwenden sondern einfach dieses zu verwenden.
‫Also JSON. parsen Sie die
‫Abfragezeichenfolge, und wenn Sie keinen Operator in der Abfragezeichenfolge
‫haben, funktioniert natürlich alles gut.
‫Es wird dort einfach keinen dieser vier Operatoren finden, aber das ist
‫kein Problem, es ersetzt dann
‫einfach nichts.
‫Und probieren wir es auch aus. Es dauert ein
‫bisschen, aber es kamen tatsächlich
‫drei Ergebnisse zurück. Lassen
‫Sie uns nun überprüfen, ob sie tatsächlich richtig sind.
‫Die Dauer sollte also größer oder gleich fünf
‫sein, und dieser hier ist eine Dauer von
‫fünf, dies hat eine Dauer von
‫neun, was größer oder gleich fünf
‫ist, und so funktioniert es tatsächlich, die Schwierigkeit ist immer noch
‫einfach und so was es bedeutet, dass der Code, den wir
‫gerade implementiert haben, einwandfrei funktioniert.
‫Perfekt, jetzt fügen wir zum Spaß noch einen
‫weiteren Parameter hinzu, also filtern wir
‫jetzt auch nach dem Preis.
‫Dieser hat also fast 2000, dann 1100, dieser hat 300.
‫Lassen Sie uns nun nach Preisen unter Tausend
‫oder unter Tausendfünfhundert filtern.
‫Und der Preis, und jetzt wieder unsere Klammern, und
‫wir verwenden weniger als 1500, und in Ordnung, senden Sie das.
‫Und was bekommen wir hier, oh, jetzt haben wir nur zwei Ergebnisse.
‫Und tatsächlich, die Preise hier, 397, und hier 1197, und
‫so ist der vorher 2000er jetzt weg.
‫Also haben wir auch diesen herausgefiltert, indem
‫wir wieder den Operator verwenden, den wir gerade implementiert haben.
‫Und wir könnten jetzt hier nach
‫allen möglichen Dingen filtern, aber Sie verstehen, worauf es ankommt, und
‫ja, wir haben hier an dieser Stelle unsere
‫Art der erweiterten Filterung implementiert, die jetzt sogar diese vier Operatoren akzeptiert.
‫In der realen Welt müssten
‫wir dann eine Dokumentation schreiben, im Wesentlichen
‫damit der Benutzer weiß, welche Arten von
‫Operationen er an unserer API ausführen kann, oder?
‫Also, idealerweise würden wir unsere API komplett dokumentieren, indem wir
‫angeben, welche Anfragen mit welchen HTTP-Methoden gestellt werden
‫können und dann auch, welche Art von
‫Filterung oder Sortierung oder all diese
‫Funktionen, welche davon verfügbar sind und wie sie sie
‫verwenden können, richtig ?
‫In unserem Fall werden wir das natürlich nicht
‫tun, aber vergessen Sie nicht, dass Sie
‫diese Art von Dokumentation wirklich machen müssen, wenn Sie
‫wirklich eine API implementieren, die von jemand anderem verwendet wird.
‫Aber egal, lassen Sie uns jetzt zu unserem nächsten
‫Video übergehen und eine Sortierfunktion implementieren.