‫-: Willkommen zurück zum nächsten Video.
‫Und lassen Sie uns jetzt
‫mit einer neuen und ziemlich fortschrittlichen Mungo-Funktion namens
‫"Virtual Populate" weitermachen. '
‫Wir haben also die
‫Bewertungen mit der
‫Tour und den Benutzerdaten gleich hier ausgefüllt, oder?
‫Wenn wir also
‫gerade nach Bewertungen fragen, erhalten wir Zugriff auf diese Informationen.
‫Damit bleibt jedoch noch ein Problem ungelöst.
‫Wie können wir also auf die Bewertungen der Touren zugreifen?
‫Also im Grunde umgekehrt.
‫Nehmen wir an, ich habe nach einer bestimmten Tour gefragt.
‫Und wie erhalte ich
‫dann Zugriff auf alle Bewertungen für diese Tour?
‫Und dieses Problem tritt hier auf,
‫weil wir die Bewertungen auf Eltern bezogen haben.
‫Im Grunde also, wenn die Bewertungen auf die
‫Touren verweisen und nicht die Touren auf die Bewertungen.
‫Wie wir am Anfang des Abschnitts sagten, wissen
‫die Eltern in
‫diesem Fall also nicht wirklich über ihre Kinder Bescheid.
‫In diesem Beispiel
‫weiß die Tour also nichts von ihren Bewertungen.
‫Und manchmal ist das in Ordnung.
‫Aber in diesem Fall möchten wir,
‫dass die Tour im Grunde alle Bewertungen kennt, die sie hat.
‫Um dies zu lösen, könnten
‫wir mit dem,
‫was wir derzeit wissen, zwei Lösungen haben.
‫Und die erste wäre, jedes Mal,
‫wenn wir Touren abfragen, manuell nach Bewertungen abzufragen.
‫Aber es wäre ein
‫bisschen umständlich, es manuell so zu machen.
‫Und die zweite Lösung könnte darin bestehen, auch
‫Kinderreferenzen auf den Touren durchzuführen.
‫Bewahren Sie also grundsätzlich ein
‫Array aller Überprüfungs-IDs auf jedem Tourdokument auf.
‫Dann müssten
‫wir nur dieses Array füllen, oder?
‫Aber das haben wir eigentlich schon
‫von vornherein ausgeschlossen,
‫weil wir ja nicht so
‫viele Review-IDs speichern wollen, die
‫dann in unserer Datenbank unendlich anwachsen könnten, oder?
‫Und das ist eigentlich genau der Grund, warum wir uns in
‫erster Linie für die Referenzierung von Eltern entschieden haben.
‫Dafür gibt es jedoch eine tolle Lösung.
‫Und das liegt daran, dass Mongoose uns mit einer
‫ziemlich fortschrittlichen Funktion namens 'Virtual Populate'
‫tatsächlich eine sehr schöne Lösung für dieses Problem bietet. ' Mit 'Virtual Populate'
‫können wir die
‫Tour also tatsächlich mit Bewertungen füllen.
‫Mit anderen Worten,
‫wir können auf alle Bewertungen für eine bestimmte
‫Tour zugreifen, ohne diese Reihe von IDs auf der Tour zu behalten.
‫Stellen Sie sich 'Virtual
‫Populate' also als eine Möglichkeit vor, dieses Array von Überprüfungs-IDs auf
‫einer Tour zu behalten, ohne es jedoch tatsächlich in der Datenbank zu speichern.
‫Und damit ist dann das Problem
‫gelöst, das wir mit der Kinderreferenzierung haben, oder?
‫Es ist also ein bisschen wie bei virtuellen Feldern, aber mit Auffüllen, okay?
‫Um das zu
‫veranschaulichen, gehen wir hier zu unserem Tourmodell.
‫Also, was ich gerade beschrieben
‫habe, wäre theoretisch, so etwas zu tun.
‫In unserem Tourmodell würden wir
‫also ein Feld namens „Bewertungen“ hinzufügen. ' (Tasten
‫klicken) Und dann den Typ
‫auf Mungo setzen. Schema. Objekt Identifikation.
‫(Tasten klicken) Und Sie müssen
‫das nicht schreiben.
‫Ich tue es nur, um es dir zu zeigen.
‫(Tasten klicken) Und dann
‫mit 'Review' verbinden. ' Und
‫das hier müsste natürlich ein Objekt sein.
‫Aber was hier zählt, ist, dass wir
‫die Referenzierung auf Kinder grundsätzlich so implementieren würden.
‫Die Tour bezieht sich also auf Bewertungen, okay?
‫Aber auch das wollen wir nicht.
‫Stattdessen implementieren wir 'Virtual Populate. “ (Tasten
‫klicken) Alles klar.
‫Und es funktioniert so.
‫Also machen wir es hier auf dem Tour-Schema.
‫(Tasten klicken) Und wir tun es
‫immer noch. virtuell.
‫Also genau wie bei diesem virtuellen Feld hier,
‫Dauer Woche, dann geben wir den Namen des virtuellen Felds ein.
‫Nennen wir es
‫also „Reviews“ und dann ein Objekt einiger Optionen.
‫Und der erste ist der
‫Name des Modells, auf das wir verweisen möchten.
‫Und so funktioniert das genauso wie bei der normalen Referenzierung.
‫(Tasten klicken) Also
‫wieder der Name des Modells.
‫Also in diesem Fall 'Rezension' oder Kurs.
‫Und jetzt müssen wir tatsächlich die Namen der Felder
‫angeben, um die beiden Datensätze zu verbinden.
‫Und dies ist für mich der komplizierteste Teil der
‫Implementierung dieses 'Virtual Populate. ' Lassen
‫Sie uns also sicherstellen, dass Sie diesen Teil wirklich verstehen.
‫Hier müssen wir also zwei Felder angeben.
‫Das fremde Feld und das lokale Feld.
‫Beginnen wir also mit dem Auslandsgebiet.
‫Dies ist also der Name des Felds im anderen Modell.
‫In diesem Fall also
‫im Review-Modell, wo der Verweis auf das aktuelle Modell gespeichert ist.
‫Und das ist in diesem Fall das Tour-Feld, oder?
‫Schauen wir uns das also an.
‫Und so haben wir auch in unserem Testmodell
‫ein Feld namens „Tour. ' Und
‫hier wird also die ID der Tour gespeichert.
‫Und deshalb geben wir hier
‫in diesem fremden Feld den Namen dieses
‫Felds an, um diese beiden Modelle zu verbinden, okay?
‫Und jetzt müssen wir dasselbe für das aktuelle Modell tun.
‫Wir müssen also sagen, wo diese ID hier
‫in diesem aktuellen Tour-Modell tatsächlich gespeichert ist.
‫Also lokales Feld.
‫Und das heißt, die ID.
‫Also, _ID, okay?
‫Und so wird diese _ID, wie
‫sie im lokalen
‫Modell heißt, im ausländischen Modell 'Tour' genannt.
‫Also im Review-Modell. Okay?
‫Und so verbinden wir diese
‫beiden Modelle wieder miteinander.
‫Schreiben wir hier,
‫dass dies 'Virtual Populate' ist, okay?
‫Und jetzt können wir mit
‫diesem Setup Populate genau wie zuvor verwenden.
‫Was wir jetzt also tun möchten,
‫ist, die Tour zu
‫bevölkern, wenn wir nur eine einzige Tour haben, okay?
‫Hier in Postman ist es also in dieser Situation von 'Get Tour. ' Okay?
‫Mal sehen, dass dies tatsächlich existiert.
‫Und das tut es, aber es ist diese seltsame Testtour.
‫Und so machen wir es mit diesem 'Waldwanderer'.
‫Gut.
‫Wenn wir diese Tour
‫erhalten, möchten wir nun die Bewertungen füllen.
‫Und es sollte bereits als leeres Array hier sein.
‫Ah, hier ist es.
‫Es ist kein leeres Array, aber es ist auf 'null' gesetzt. ' Aber
‫das virtuelle Feld ist mit
‫den Bewertungen eigentlich schon da.
‫Aber es ist an dieser
‫Stelle null, weil wir es noch nicht ausgefüllt haben, okay?
‫Und wieder möchten wir es nur hier
‫in "Get One
‫Tour" und nicht in "Get All Tours" eingeben,
‫da dies ein bisschen zu viele
‫Informationen wäre, um sie an einen Kunden zu senden, wenn er alle Touren erhält.
‫Wenn wir alle Touren bekommen,
‫dient das normalerweise dazu, eine Übersichtsseite zu erstellen.
‫Und in diesem
‫Fall benötigen wir normalerweise nicht alle Bewertungen.
‫Das brauchen wir nur,
‫wenn wir wirklich nur eine Tour anzeigen.
‫Okay? Und so denke ich, dass
‫es sinnvoll ist, dies nur auf 'Get One Tour' zu bevölkern. ' Also,
‫lass uns das direkt
‫im Controller auffüllen.
‫Also, der Tour-Controller und hier unten, wo
‫wir 'Get Tour' haben. ' Und
‫das ist eigentlich ganz einfach.
‫Sie müssen lediglich nach der anderen Abfrage
‫'Populate' aufrufen und dann einfach den Namen des Felds übergeben,
‫das wir ausfüllen möchten.
‫Und so heißt das, wie wir bereits wissen, „Rezensionen. ' Und
‫das sollte es eigentlich schon sein.
‫Gut?
‫Lassen Sie uns das jetzt testen und einen Blick darauf werfen.
‫Und tatsächlich bekommen wir jetzt hier unseren vollständigen Testbericht.
‫Gut? Das wurde also bevölkert.
‫Und das bedeutet, dass unser Virtual
‫Populate tatsächlich funktioniert.
‫Jetzt werden Sie
‫vielleicht feststellen, dass dies ein
‫Problem darstellt, da dies hier im
‫Grunde eine Kette von Populationen erzeugt.
‫Und das ist alles andere als ideal.
‫Wir haben die Tour also mit Bewertungen gefüllt.
‫Aber dann werden die Bewertungen auch
‫wieder mit der Tour gefüllt, und auch mit dem Benutzer.
‫Und dann wird auch die Tour
‫immer mehr von Guides bevölkert.
‫Was in diesem Fall nicht passiert,
‫weil es keine Anleitungen gibt.
‫Aber wenn es sie gäbe, dann hätten wir noch eine andere Bevölkerung.
‫Hier hätten wir also eine Kette von drei Einwohnern.
‫Also für die Leistung ist das natürlich überhaupt nicht ideal.
‫Vor allem hier mit der Tour.
‫Also haben wir die Tour mit Bewertungen gefüllt.
‫Und in den Bewertungen haben wir wieder die Daten zur Tour.
‫Und so macht das überhaupt nicht viel Sinn.
‫Also, es ist jetzt ein Durcheinander.
‫Also, die Lösung, die ich hier verwenden
‫werde, besteht darin,
‫das Auffüllen der Bewertungen mit den Touren zu deaktivieren, okay?
‫Im Grunde brauchen wir diese Daten hier also nicht bei jeder Bewertung.
‫In diesem Fall halte ich das für eine gute Lösung.
‫Aber auch in Ihrem Fall kommt es natürlich
‫immer darauf an, wie
‫Ihre Bewerbung in Ihrem konkreten Fall funktioniert.
‫Aber in dieser App ist es logischer, wirklich die
‫Bewertungen für Touren verfügbar zu
‫haben, und es ist nicht so wichtig,
‫dass die Tour in der Bewertung verfügbar ist, okay?
‫Also, lassen Sie uns das Auffüllen im
‫Review-Modell grundsätzlich deaktivieren.
‫Okay?
‫Also, lasst uns diesen Teil einfach auskommentieren,
‫ihn hier
‫runter kopieren und so im Grunde diesen ersten loswerden.
‫Nun gut?
‫Machen Sie sich bereit zu sparen.
‫Versuchen wir es nochmal.
‫Und so sollten wir hier jetzt nur die ID der Tour sehen.
‫Okay? Und tatsächlich bekommen wir genau das.
‫Okay? Damit
‫machen wir natürlich immer noch Elternreferenzen, okay?
‫Wir behalten hier immer noch einen Hinweis auf die Touren,
‫aber wir füllen ihn einfach nicht aus.
‫Und wieder, weil wir
‫diese Daten nicht immer hier brauchen.
‫Gut. Fassen wir kurz zusammen, was wir hier gemacht haben.
‫Also haben wir damit begonnen, bei der Überprüfung nur auf Eltern zu verweisen.
‫Aber das führte dazu, dass wir
‫auf den Touren keinen Zugriff auf die entsprechenden Bewertungen hatten.
‫Und die einfachste Lösung dafür
‫wäre, auf den Touren auch Kinderreferenzen durchzuführen.
‫Aber das Problem
‫dabei wäre, dass wir eigentlich nicht
‫ein Array aller untergeordneten
‫Dokumente im übergeordneten Dokument behalten möchten, oder?
‫Denn auch hier
‫wollen wir nicht zulassen, dass Arrays unbegrenzt wachsen.
‫Anstatt dies
‫zu tun, haben wir virtuelle Populationen wie diese implementiert.
‫Gut? Also einfach so.
‫Und das erlaubt uns, im Grunde genau das Gleiche zu tun.
‫Behalten Sie also einen Verweis auf alle
‫untergeordneten Dokumente
‫im übergeordneten Dokument bei, ohne diese Informationen jedoch
‫tatsächlich in der Datenbank zu speichern.
‫Nachdem wir dieses virtuelle Populate
‫eingerichtet haben, müssen wir also nur Populate
‫verwenden, wie wir es zuvor mit den echten Referenzen getan haben.
‫Und schließlich haben wir
‫auch eine der Populationen deaktiviert, die wir in der Überprüfung hatten.
‫Dies hier, wo wir
‫die Tour-ID ausgefüllt haben, weil dies
‫eine ineffiziente Kette von Populationen erstellt hat.
‫Und das wollen wir natürlich nicht.
‫Und so haben
‫wir am Ende ein Ergebnis wie dieses bekommen, okay?
‫Groß.
‫Also, ich hoffe, das war für Sie verständlich.
‫Und damit schließen
‫wir diesen Teil der Bevölkerung fürs Erste ab, okay?
‫Kommen wir nun zu einem nächsten Thema, bei
‫dem es sich im Grunde um das Erstellen verschachtelter Routen handelt.