‫Lehrer: Denken Sie also
‫daran, wie wir im Video zu unserem
‫Datenmodell gesagt haben, dass wir die
‫Tourguide-Daten entweder einbetten oder referenzieren können.
‫In diesem Video zeige ich Ihnen also, wie wir
‫die Einbettung von Tourguide-Dokumenten in ein Tourdokument implementieren können.
‫Also noch einmal, in diesem Vortrag
‫werden wir Benutzerdokumente in Tourdokumente einbetten, und dann zeige
‫ich Ihnen im nächsten
‫Video, wie wir Benutzer tatsächlich
‫referenzieren können, anstatt sie einzubetten, in Ordnung?
‫Die Idee hier ist also, dass
‫der Benutzer beim Erstellen eines neuen Tourdokuments
‫einfach ein Array von Benutzer-IDs hinzufügt und wir
‫dann die entsprechenden Benutzerdokumente basierend auf
‫diesen IDs erhalten
‫und sie unseren Tourdokumenten hinzufügen.
‫Mit anderen Worten, wir betten sie in unsere Tour ein, okay?
‫Also machen wir das jetzt hier.
‫Leitfäden werden also vom Typ Array sein, okay?
‫Ganz einfach, und bevor wir Code implementieren,
‫möchte ich Ihnen als Beispiel zeigen,
‫wie dies beim Erstellen einer neuen Tour funktionieren würde.
‫Also, gehen wir zurück zu
‫Postman hier und erstellen eine neue
‫Tour, okay, und
‫hier in unserem Körper würden wir jetzt natürlich die Leitfäden,
‫Anführungszeichen hinzufügen und dann ein Array von IDs angeben, okay?
‫Lassen Sie uns also einige Benutzer-IDs abrufen.
‫Holen Sie sich also alle Benutzer, sehen wir uns an, was wir hier haben.
‫Wir haben hier also tatsächlich eine Anleitung,
‫und holen wir uns diese
‫ID zusammen mit den Anführungszeichen, und
‫fügen wir sie hier
‫ein und fügen wir einige andere hinzu.
‫Also auch das hier und eigentlich nur diese beiden.
‫Das sollte ausreichen, um das Zeug zu testen, okay, und so werden
‫wir dann eine neue
‫Tour mit zwei Guides erstellen, okay, und wieder,
‫wenn wir diese Tour speichern, werden wir
‫dann hinter
‫den Kulissen die holen
‫zwei Benutzerdokumente, die diesen beiden IDs entsprechen, in Ordnung?
‫Also, lassen Sie uns das
‫implementieren, und in
‫unserem Modell ist der beste Ort
‫dafür eine vorab gespeicherte Middleware, oder?
‫Das passiert dann automatisch hinter den Kulissen,
‫im Grunde jedes
‫Mal, wenn eine neue Tour gespeichert wird, und eigentlich
‫möchte ich es hier nicht tun.
‫Wir haben also eine Abfrage, hier
‫ist das Dokument "Middleware", also machen
‫wir das hier.
‫Also tourSchema. pre,
‫Okay, rufen wir gleich hier weiter an, damit wir
‫es am Ende nicht vergessen.
‫Okay, das bekommen wir. guides als Eingabe, und denken Sie daran,
‫dass dies ein Array aller Benutzer-IDs
‫sein wird, richtig, und wir werden sie also
‫mit einer . map, und dann
‫holen Sie sich in jeder
‫Iteration das Benutzerdokument für die aktuelle ID,
‫in Ordnung, und wir werden das in den Anleitungen speichern, in Ordnung?
‫Also, das aktuelle Element, das die ID sein
‫wird, nennen wir es
‫eigentlich ID, um es ein bisschen
‫leichter verständlich zu machen, und jetzt brauchen wir tatsächlich den
‫Benutzer, richtig, also lass uns das importieren.
‫Also, const User,
‫require, und
‫es ist tatsächlich im selben Ordner hier, in Ordnung, also
‫User. findByID
‫mit der aktuellen ID, in Ordnung?
‫Aber denken Sie jetzt daran,
‫dass wir dieses Versprechen hier tatsächlich abwarten müssen, und daher muss
‫die Funktion als asynchron markiert
‫werden, aber jetzt bekommen
‫wir tatsächlich ein Problem, in Ordnung, weil
‫die . Die map-Methode weist
‫das Ergebnis jeder Iteration dem neuen Element im
‫Guides-Array zu, okay, und jetzt haben
‫wir hier eine asynchrone
‫Funktion, die, wie Sie wissen, ein
‫Versprechen zurückgibt, und im Moment ist
‫dieses Guides-Array hier im Grunde ein Array voller Versprechen, okay.
‫Nennen wir diese Anleitungen eigentlich Versprechen
‫und deshalb müssen wir
‫jetzt alle diese Versprechen im Grunde gleichzeitig ausführen.
‫Wie ich Ihnen etwas weiter oben
‫in diesem Code gezeigt habe,
‫müssen wir zumindest, wenn Sie den asynchronen
‫JavaScript-Abschnitt nicht übersprungen haben, nur auf Promise warten. all and then guidesVersprechen,
‫okay, und das
‫Ergebnis können wir diesem
‫direkt zuordnen. Guides, und überschreibe also
‫im Grunde das Tempel-Array von IDs
‫mit einem Array von Benutzerdokumenten, okay, und da wir hier
‫jetzt await
‫verwenden, müssen wir diese Funktion als asynchron markieren, okay?
‫Speichern Sie es und ich denke, das war es tatsächlich, okay?
‫Auch hier müssen wir Promise verwenden. alles hier, weil
‫das Ergebnis von all dem hier ein Versprechen ist, okay, und
‫daher wird dieses Array hier ein Array voller Versprechen
‫sein, die wir dann ausführen, indem
‫wir auf das Versprechen warten. alles okay?
‫Also, lassen Sie uns das jetzt
‫tatsächlich testen, und wir haben den gesamten Code hier bereits fertig,
‫wir sollten diesen Namen einfach hier ändern.
‫Also, 'Testtour', aber die IDs sind schon da.
‫Lassen Sie uns dies senden, und unser Tourname muss länger
‫sein, 'New Task Tour. ' Okay,
‫aber jetzt werfen wir einen Blick auf unsere Ergebnisse,
‫und so bekommen wir tatsächlich unsere Anleitungen hier, okay?
‫Das sind also die vollständigen
‫Dokumente, und zwar nicht nur die Ausweise, oder?
‫Großartig, und so
‫könnten wir die Einbettung für dieses Tourguide-Beispiel implementieren.
‫Nun, dieser einfache Code, den wir hier
‫implementiert haben, funktioniert natürlich nur zum Erstellen neuer Dokumente,
‫nicht zum Aktualisieren, oder?
‫Jetzt müssten wir also
‫weitermachen und dieselbe Logik auch für Updates implementieren.
‫Ich werde dies jedoch nicht tun, denn
‫erinnern Sie sich an das Video, in dem wir unsere
‫Daten modelliert haben, dass die Einbettung
‫dieser Daten in diesem Fall tatsächlich einige Nachteile hat.
‫Stellen Sie sich zum Beispiel vor,
‫dass ein Reiseleiter seine E-Mail-Adresse aktualisiert oder
‫seine Rolle von Reiseleiter zu Reiseleiter wechselt.
‫Jedes Mal, wenn eine dieser Änderungen vorkommt, müssen Sie
‫überprüfen, ob eine Tour diesen Benutzer als
‫Leitfaden hat, und wenn ja, dann die Tour
‫auch aktualisieren, und das ist wirklich viel
‫Arbeit und wir nicht Ich werde
‫in diese
‫Richtung gehen, in Ordnung?
‫Nun wollte ich Ihnen noch zeigen, wie
‫Embedding wirklich funktioniert
‫und wie wir es in dieser
‫Situation umsetzen können, denn ich halte es wirklich
‫für sehr wichtig, dass Sie immer noch
‫wissen, wie man alles macht,
‫falls Sie es jemals in Ihren
‫eigenen Anwendungen brauchen, okay, Aber in
‫dieser speziellen Situation werden wir statt der Einbettung Referenzen
‫verwenden, und ich habe in diesem
‫Video über die Gründe dafür gesprochen, okay?
‫Also, lasst uns tatsächlich weitermachen und das gleich
‫in der nächsten Vorlesung machen.