‫Kursleiter: Bisher haben
‫wir in diesem Abschnitt über Mongoose-Modelle,
‫CRUD-Operationen mit Mongoose gesprochen, wir
‫haben viele Abfragen durchgeführt und wir haben etwas
‫über die Aggregationspipeline gelernt, aber jetzt kehren wir für
‫die nächsten paar Videos zu unseren
‫Daten zurück Modellieren und lernen Sie einige super nützliche Funktionen kennen,
‫die Mongoose uns bietet, um unsere Daten zu modellieren.
‫Und das erste, über das wir
‫sprechen werden, sind virtuelle Immobilien.
‫Und so öffnen wir unser Tourmodell hier.
‫In Ordnung, jetzt sind virtuelle Eigenschaften im Grunde Felder, die wir
‫in unserem Schema definieren
‫können, aber die nicht beibehalten werden.
‫Sie werden also nicht in der Datenbank gespeichert,
‫um uns dort Platz zu sparen.
‫Und meistens wollen
‫wir unsere Daten natürlich auch wirklich in der
‫Datenbank speichern, aber für Felder, die
‫voneinander abgeleitet werden können, sind virtuelle Eigenschaften sehr sinnvoll.
‫Zum Beispiel eine Umrechnung von Meilen in Kilometer, es macht
‫keinen Sinn, diese beiden Felder in
‫einer Datenbank zu speichern, wenn wir einfach
‫eines in das andere umrechnen können, oder?
‫Okay, also definieren wir jetzt eine virtuelle Eigenschaft, die
‫die Tourdauer in Wochen enthält.
‫Und das ist im Grunde ein
‫Feld, das wir sehr leicht von der Dauer, die
‫wir bereits haben, in Tage umrechnen können, oder?
‫Und so funktioniert es.
‫Wir definieren diese virtuellen Eigenschaften auf dem Tour-Schema,
‫und so sagen wir tourSchema. virtual und dann den Namen der
‫virtuellen Eigenschaft.
‫Nennen wir es also Dauer Wochen,
‫und dann müssen wir die Methode get definieren.
‫Und das nur, weil diese virtuelle Eigenschaft
‫hier im Grunde jedes Mal
‫erstellt wird, wenn wir Daten aus der Datenbank holen.
‫Daher wird diese Get-Funktion hier Getter genannt.
‫Jetzt übergeben wir hier eine Funktion,
‫und tatsächlich
‫wird diese Rückruffunktion eine echte Funktion sein, also keine
‫Pfeilfunktion, und ich werde Ihnen gleich erklären, warum.
‫Wie definieren wir nun grundsätzlich
‫die virtuelle Eigenschaft?
‫Nun, es ist ganz einfach, wir müssen nur
‫sagen, dass wir dies zurückgeben wollen, . Dauer in diesem Fall durch
‫sieben geteilt.
‫So berechnen wir die Dauer in Wochen, also die Dauer
‫in Tagen geteilt durch sieben, weil die
‫Woche sieben Tage hat, und das ist
‫dann die Dauer in Wochen.
‫Wenn eine Tour zum Beispiel sieben Tage hat,
‫dann ist es natürlich eine Woche.
‫Jetzt habe ich diese reguläre Funktion hier
‫verwendet, weil Sie sich erinnern, dass eine Pfeilfunktion
‫kein eigenes Festplattenschlüsselwort erhält.
‫Hier brauchen wir tatsächlich das Disk-Schlüsselwort,
‫da das Disk-Schlüsselwort in
‫diesem Fall auf das aktuelle Dokument verweist.
‫Wenn wir dies also verwenden
‫möchten, sollten wir normalerweise immer eine reguläre Funktion verwenden.
‫Also wirklich überall in Mongoose werde
‫ich immer diese normalen Funktionen verwenden, an die
‫wir gewöhnt sind.
‫Also speichern Sie hier, und das war's.
‫So definieren wir Dauerwochen, die
‫nicht in der Datenbank gespeichert werden,
‫sondern nur da sein werden, sobald wir die Daten erhalten.
‫Im Moment wird es tatsächlich noch nicht da
‫sein, weil hier ein Stück fehlt, also lasst
‫mich damit beginnen, es euch zu zeigen.
‫Wenn wir also versuchen, alle Touren zu bekommen,
‫werden Sie feststellen, dass die Dauer von Wochen hier
‫nirgendwo zu finden ist.
‫Und das liegt daran, dass wir in unserem Schema explizit
‫definieren müssen, dass wir die virtuellen Eigenschaften in unserer Ausgabe
‫haben möchten.
‫Und erinnern Sie sich, wie ich das diesem Mungo gesagt habe. schema können wir nicht nur
‫das Objekt mit
‫der Schemadefinition selbst übergeben, sondern
‫auch ein Objekt für die Schemaoptionen.
‫Und fügen wir das hier am
‫Ende hinzu, also ist dieses erste Objekt hier die Schemadefinition und jetzt
‫das zweite ein Objekt für die Optionen.
‫Und was wir hier angeben müssen, sind die beiden JSON-Eigenschaften
‫hier, und was wir dann sagen ist, dass
‫wir jedes Mal, wenn die Daten tatsächlich als JSON ausgegeben werden,
‫möchten, dass Virtuals wahr sind.
‫Also im Grunde die Virtuals, um Teil der Ausgabe zu sein.
‫Und jetzt kopiere ich das, weil
‫wir auch Einspruch erheben wollen.
‫Also im Grunde, wenn die Daten als
‫Objekt ausgegeben werden.
‫Wenn wir also jetzt hierher zurückkehren, sollten
‫wir Dauerwochen sehen können.
‫Warten wir es ab, und tatsächlich ist es hier.
‫Es sind also fünf Tage und das ist 0. 71 Wochen.
‫Hier haben wir sieben Tage, also eine Woche.
‫Okay, das funktioniert tatsächlich, großartig.
‫Eine Sache, die wir
‫beachten müssen, ist, dass wir diese virtuelle Eigenschaft hier
‫nicht in einer Abfrage verwenden können, da sie
‫technisch nicht Teil der Datenbank ist.
‫So können
‫wir zB Tour nicht sagen. Finden Sie heraus, wo Dauer Wochen gleich eins ist.
‫Das wird wieder nicht funktionieren, weil diese Eigenschaft
‫nicht wirklich Teil der Datenbank ist.
‫Nun hätten wir diese Konvertierung natürlich auch jedes
‫Mal durchführen können, nachdem wir die Daten abgefragt haben,
‫beispielsweise wie in einem Controller,
‫aber das wäre nicht die beste Vorgehensweise, nur weil wir
‫versuchen möchten, Geschäftslogik und Anwendungslogik so weit
‫getrennt zu halten wie möglich, erinnerst du dich?
‫Das war also das ganze Gerede über fette
‫Modelle und dünne Controller, über das wir vorhin gesprochen haben
‫und das besagt, dass
‫wir Modelle mit so viel Geschäftslogik wie möglich haben
‫sollten und dünne Controller mit
‫so wenig Geschäftslogik wie möglich.
‫Und so sind virtuelle Immobilien wie diese tatsächlich ein gutes
‫Beispiel dafür, wie wir diese Art
‫von Architektur erreichen können.
‫Die Dauer in Wochen zu kennen ist
‫also eine Geschäftslogik, da sie mit dem Geschäft
‫selbst zu tun hat, nicht mit Dingen wie Anfragen oder
‫Antworten, und daher führen wir die Berechnung direkt im
‫Modell durch, wo sie hingehört und
‫nicht im Controller.