﻿1
00:00:01,100 --> 00:00:03,780
‫Kursleiter: Lassen Sie uns nun einen Prozess

2
00:00:03,780 --> 00:00:06,610
‫namens populate verwenden, um tatsächlich Zugriff auf die

3
00:00:06,610 --> 00:00:10,173
‫referenzierten Tourguides zu erhalten, wenn wir eine bestimmte Tour abfragen.

4
00:00:11,820 --> 00:00:14,290
‫Im letzten Video haben wir

5
00:00:14,290 --> 00:00:17,660
‫also einen Verweis auf den Benutzer erstellt, hier in

6
00:00:17,660 --> 00:00:20,180
‫diesem Guide-Feld, direkt in unserem Tourmodell, oder?

7
00:00:20,180 --> 00:00:22,840
‫Und jetzt werden wir populate verwenden, um

8
00:00:22,840 --> 00:00:25,610
‫die Felder, auf die wir verwiesen haben, durch

9
00:00:25,610 --> 00:00:28,210
‫die eigentlichen zugehörigen Daten zu ersetzen.

10
00:00:28,210 --> 00:00:30,330
‫Und das Ergebnis sieht so

11
00:00:30,330 --> 00:00:32,920
‫aus, als wären die Daten schon immer

12
00:00:32,920 --> 00:00:35,100
‫eingebettet gewesen, obwohl sie sich, wie

13
00:00:35,100 --> 00:00:38,280
‫wir wissen, in einer ganz anderen Sammlung befinden, okay?

14
00:00:38,280 --> 00:00:41,940
‫Der Auffüllprozess findet jetzt immer in einer Abfrage statt.

15
00:00:41,940 --> 00:00:44,713
‫Also gehen wir jetzt zu unserem Tour-Controller

16
00:00:46,000 --> 00:00:50,340
‫und dann direkt zu der Funktion, wo wir eine einzelne Tour erhalten.

17
00:00:50,340 --> 00:00:52,460
‫Also hier, in Get Tour.

18
00:00:52,460 --> 00:00:55,440
‫Und hier ist unsere Anfrage, richtig?

19
00:00:55,440 --> 00:00:57,831
‫Hier bauen wir also unsere Abfrage auf.

20
00:00:57,831 --> 00:01:00,450
‫Und jetzt müssen wir nur noch das

21
00:01:00,450 --> 00:01:02,183
‫Element zur Abfrage hinzufügen.

22
00:01:04,370 --> 00:01:07,440
‫Also auffüllen, und dann den Namen des Feldes,

23
00:01:07,440 --> 00:01:09,250
‫das wir eigentlich ausfüllen

24
00:01:10,490 --> 00:01:12,533
‫wollen und das heißt Hilfslinien, okay?

25
00:01:13,950 --> 00:01:17,850
‫Und wenn man darüber nachdenkt, macht dieser Name tatsächlich Sinn.

26
00:01:17,850 --> 00:01:21,080
‫Wir wollen also im Grunde so füllen,

27
00:01:21,080 --> 00:01:24,940
‫um das Feld namens Hilfslinien in unserem Modell auszufüllen.

28
00:01:24,940 --> 00:01:27,870
‫Richtig, auch dieses Guides-Feld enthält

29
00:01:27,870 --> 00:01:29,860
‫nur die Referenz.

30
00:01:29,860 --> 00:01:32,620
‫und mit populate füllen wir es dann

31
00:01:32,620 --> 00:01:36,750
‫mit den eigentlichen Daten, alles klar und wieder nur in der

32
00:01:36,750 --> 00:01:39,890
‫Abfrage und nicht in der eigentlichen Datenbank, okay?

33
00:01:39,890 --> 00:01:41,840
‫Das ist also wirklich alles, was wir tun müssen.

34
00:01:41,840 --> 00:01:46,760
‫Und jetzt schauen wir uns das Ergebnis an, okay?

35
00:01:46,760 --> 00:01:51,760
‫Das ist also die ID der Tour und denken wir daran, dass

36
00:01:51,840 --> 00:01:55,370
‫die Guides im Moment so aussehen, okay?

37
00:01:55,370 --> 00:01:59,323
‫Aber wenn wir jetzt Tour und mit dieser ID bekommen,

38
00:02:01,170 --> 00:02:03,260
‫dann warten wir jetzt

39
00:02:03,260 --> 00:02:07,220
‫darauf, und tatsächlich, hier sind die Daten zu den Guides.

40
00:02:07,220 --> 00:02:10,720
‫Okay, diese beiden Elemente, die wir bereits in

41
00:02:10,720 --> 00:02:14,600
‫den Anleitungen hatten, wurden jetzt mit den tatsächlichen Daten gefüllt.

42
00:02:14,600 --> 00:02:17,373
‫Und wenn wir uns jetzt alle

43
00:02:18,550 --> 00:02:21,933
‫Touren ansehen, lassen Sie uns hier einiges davon loswerden.

44
00:02:22,842 --> 00:02:25,073
‫Wir haben hier zu viel offen.

45
00:02:26,010 --> 00:02:28,423
‫Also wenn wir jetzt alle Touren bekommen, okay,

46
00:02:29,730 --> 00:02:31,820
‫dann scrollen wir bis zum Ende,

47
00:02:31,820 --> 00:02:33,280
‫wo die neue sein

48
00:02:36,030 --> 00:02:38,590
‫soll und anscheinend ist es jetzt gut, ach

49
00:02:38,590 --> 00:02:40,690
‫das liegt daran, dass ich diesen

50
00:02:41,840 --> 00:02:46,610
‫Filter hier habe, lass uns den loswerden, und jetzt habe ich meine 10 Ergebnisse und

51
00:02:46,610 --> 00:02:49,270
‫tatsächlich ist es hier richtig, also die neue Testtour.

52
00:02:49,270 --> 00:02:52,290
‫Und jetzt sehen Sie, dass es hier wieder darum geht,

53
00:02:52,290 --> 00:02:55,860
‫uns nur die Werte anzuzeigen, die tatsächlich in der Datenbank enthalten sind.

54
00:02:55,860 --> 00:02:58,010
‫Lassen Sie uns das auch hier in Compass bestätigen.

55
00:03:01,940 --> 00:03:05,200
‫Und so haben wir tatsächlich, wie Sie sehen, hier

56
00:03:05,200 --> 00:03:09,750
‫in der Datenbank noch nicht die eigentlichen Daten, sondern nur wirklich die IDs.

57
00:03:09,750 --> 00:03:13,290
‫Okay, und es ist nur dieser Schritt zum Auffüllen, der

58
00:03:13,290 --> 00:03:16,540
‫diese IDs dann durch die tatsächlichen Daten ersetzt, okay?

59
00:03:16,540 --> 00:03:18,740
‫Und genau hier passiert das

60
00:03:18,740 --> 00:03:21,260
‫nicht gut, weil wir das Bevölkern

61
00:03:21,260 --> 00:03:24,200
‫nicht im Routenhandler Get all Tours implementiert haben.

62
00:03:24,200 --> 00:03:27,950
‫Okay, jetzt zeige ich Ihnen nur einen kleinen Trick, den wir

63
00:03:27,950 --> 00:03:30,490
‫mit der Funktion populate machen können.

64
00:03:30,490 --> 00:03:33,590
‫Das heißt eigentlich auch nur die bestimmten Felder auswählen.

65
00:03:33,590 --> 00:03:38,370
‫Wir interessieren uns zum Beispiel hier nicht für diese v-Eigenschaft und auch

66
00:03:38,370 --> 00:03:41,350
‫nicht für passwordChangedAt, also sind das nicht

67
00:03:41,350 --> 00:03:42,683
‫die Daten,

68
00:03:42,683 --> 00:03:45,660
‫die wir über unsere Reiseleiter haben wollen.

69
00:03:45,660 --> 00:03:49,197
‫Und hier in populate können wir das tatsächlich spezifizieren.

70
00:03:49,197 --> 00:03:52,230
‫Anstatt die Zeichenfolge einfach weiterzugeben, können

71
00:03:52,230 --> 00:03:55,280
‫wir ein Optionsobjekt erstellen und dann

72
00:03:56,620 --> 00:03:57,793
‫sagen, der

73
00:03:59,440 --> 00:04:02,850
‫Pfad ist Hilfslinien, also im Grunde der

74
00:04:02,850 --> 00:04:07,850
‫Name des Felds, das wir ersetzen möchten, und dann können wir

75
00:04:09,800 --> 00:04:11,553
‫wie üblich select

76
00:04:12,710 --> 00:04:16,970
‫verwenden , und dann minus, dieses hier und auch

77
00:04:16,970 --> 00:04:21,790
‫das andere, also passwordChangedAt, es ist nur einfacher zu kopieren,

78
00:04:21,790 --> 00:04:25,370
‫in Ordnung, also lass es uns hier ändern

79
00:04:25,370 --> 00:04:27,603
‫und es erneut senden.

80
00:04:28,600 --> 00:04:31,800
‫Und das ist natürlich nicht der richtige Weg, also

81
00:04:31,800 --> 00:04:35,910
‫sorry dafür, ich glaube ich habe ihn auch schon mal benutzt,

82
00:04:35,910 --> 00:04:38,143
‫eigentlich wo ich euch diesen eigentlich

83
00:04:39,040 --> 00:04:42,970
‫zeigen wollte, richtig, und sorry dafür, aber trotzdem was wir

84
00:04:42,970 --> 00:04:45,920
‫loswerden wollen von hier ist dieses V

85
00:04:45,920 --> 00:04:47,510
‫und dieses passwordChangedAt.

86
00:04:47,510 --> 00:04:49,230
‫Und das haben wir

87
00:04:49,230 --> 00:04:51,737
‫auch schon gemacht, also wenn wir es

88
00:04:51,737 --> 00:04:55,810
‫jetzt versenden, dann bekommen wir natürlich nur die Daten, die uns interessieren.

89
00:04:55,810 --> 00:04:58,540
‫In Ordnung, diese Funktion zum Auffüllen ist also

90
00:04:58,540 --> 00:05:01,110
‫ein absolut grundlegendes Werkzeug für die Arbeit

91
00:05:01,110 --> 00:05:03,160
‫mit Daten in Mongoose.

92
00:05:03,160 --> 00:05:04,790
‫Und vor allem natürlich,

93
00:05:04,790 --> 00:05:06,760
‫wenn es Beziehungen zwischen Daten gibt,

94
00:05:06,760 --> 00:05:09,860
‫okay, man sollte also immer genau wissen, wie und wann

95
00:05:09,860 --> 00:05:12,220
‫man sie für eigene Anwendungen nutzen kann.

96
00:05:12,220 --> 00:05:15,040
‫Und um dafür zu trainieren, werden wir

97
00:05:15,040 --> 00:05:18,200
‫es in diesem Abschnitt natürlich noch viele Male verwenden.

98
00:05:18,200 --> 00:05:21,140
‫Ich möchte Sie nur bedenken, dass hinter

99
00:05:21,140 --> 00:05:24,280
‫den Kulissen durch die Verwendung von Auffüllen tatsächlich

100
00:05:24,280 --> 00:05:26,300
‫eine neue Abfrage erstellt

101
00:05:26,300 --> 00:05:29,290
‫wird, was sich auf Ihre Leistung auswirken kann.

102
00:05:29,290 --> 00:05:31,985
‫Okay, natürlich, wenn Sie es nur ein-

103
00:05:31,985 --> 00:05:35,430
‫oder zweimal und in einer Art kleiner Anwendung machen, dann

104
00:05:35,430 --> 00:05:38,170
‫ist der kleine Leistungseinbruch überhaupt keine große Sache.

105
00:05:38,170 --> 00:05:40,944
‫Aber in einer riesigen Anwendung, mit

106
00:05:40,944 --> 00:05:43,469
‫Tonnen von Einwohnern überall, dann

107
00:05:43,469 --> 00:05:46,450
‫könnte das tatsächlich einen Effekt haben, okay?

108
00:05:46,450 --> 00:05:47,960
‫Behalte das also einfach im Hinterkopf.

109
00:05:47,960 --> 00:05:51,430
‫Okay, und es macht wirklich Sinn, denn

110
00:05:51,430 --> 00:05:54,700
‫wie sonst könnte Mongoose gleichzeitig Daten

111
00:05:54,700 --> 00:05:57,700
‫über Touren und Benutzer erhalten.

112
00:05:57,700 --> 00:06:01,050
‫Es muss grundsätzlich eine neue Abfrage erstellt werden,

113
00:06:01,050 --> 00:06:03,960
‫um diese Verbindung herstellen zu können.

114
00:06:03,960 --> 00:06:06,060
‫Okay und jetzt, um das zu beenden, erinnern

115
00:06:06,060 --> 00:06:07,763
‫wir uns daran, was ich

116
00:06:07,763 --> 00:06:11,610
‫Ihnen gezeigt habe, dass dies tatsächlich nicht funktioniert hat, wenn wir alle Touren bekommen.

117
00:06:11,610 --> 00:06:15,460
‫Denken Sie also daran, dass wir in dieser Situation immer

118
00:06:15,460 --> 00:06:18,620
‫noch einfach die IDs der Tourguides und nicht

119
00:06:18,620 --> 00:06:20,850
‫die referenzierten Benutzerdaten erhalten.

120
00:06:20,850 --> 00:06:24,050
‫Okay, und eine Lösung wäre im Grunde, diesen

121
00:06:24,050 --> 00:06:27,956
‫Code hierher zu kopieren, also diese Funktion zum Auffüllen,

122
00:06:27,956 --> 00:06:30,950
‫auch hier in diesen Route-Handler, aber

123
00:06:30,950 --> 00:06:34,390
‫duplizierter Code ist natürlich nie eine gute Idee.

124
00:06:34,390 --> 00:06:35,635
‫Und ich hoffe,

125
00:06:35,635 --> 00:06:39,640
‫dass Sie an dieser Stelle bereits einen besseren Weg kennen, dies zu tun.

126
00:06:39,640 --> 00:06:42,310
‫Und die Antwort darauf ist Abfrage-Middleware.

127
00:06:42,310 --> 00:06:46,833
‫Okay, also gehen wir schnell zu unserem Modell über, und ich kopiere

128
00:06:47,910 --> 00:06:49,620
‫diesen Code jetzt hier

129
00:06:51,731 --> 00:06:55,253
‫und so, ja, lass uns das gleich hier machen.

130
00:06:57,580 --> 00:06:58,413
‫Also,

131
00:06:59,430 --> 00:07:03,460
‫ein pre und dann mache ich es wie zuvor

132
00:07:03,460 --> 00:07:06,640
‫mit einem regulären Ausdruck, der dann für

133
00:07:06,640 --> 00:07:09,363
‫alles funktioniert, was mit find beginnt.

134
00:07:11,830 --> 00:07:13,083
‫Also einfach

135
00:07:17,010 --> 00:07:21,500
‫so, Okay, und natürlich tun wir dies in der

136
00:07:21,500 --> 00:07:23,820
‫Abfrage-Middleware, denn diese Art

137
00:07:23,820 --> 00:07:27,000
‫von Middleware wird bei jeder Abfrage ausgeführt.

138
00:07:27,000 --> 00:07:30,540
‫Richtig, lassen Sie uns einfach all diese Pre-Middlewares

139
00:07:32,180 --> 00:07:34,943
‫zusammenstellen und dann die Post-Middleware.

140
00:07:37,230 --> 00:07:42,230
‫In Ordnung, also lassen Sie mich den Code kopieren, den wir zuvor hatten, und

141
00:07:42,660 --> 00:07:45,410
‫fügen wir ihn jetzt einfach hinzu, denn

142
00:07:45,410 --> 00:07:47,620
‫denken Sie daran, dass dies

143
00:07:47,620 --> 00:07:50,810
‫in der Abfrage-Middleware immer auf die aktuelle Abfrage verweist.

144
00:07:50,810 --> 00:07:53,760
‫Und so füllen nun im Grunde

145
00:07:53,760 --> 00:07:56,560
‫alle Abfragen automatisch das Guides-Feld mit

146
00:07:56,560 --> 00:07:58,740
‫dem referenzierten Benutzer.

147
00:07:58,740 --> 00:08:02,053
‫Okay, und so können wir es jetzt hier loswerden.

148
00:08:05,040 --> 00:08:07,770
‫Und ja, das ist es tatsächlich.

149
00:08:07,770 --> 00:08:09,720
‫Also machen wir es jetzt hier,

150
00:08:09,720 --> 00:08:12,040
‫anstatt es an zwei Stellen im Controller zu tun.

151
00:08:12,040 --> 00:08:15,200
‫Dies ist also ein netter kleiner Trick für den Fall, dass

152
00:08:15,200 --> 00:08:17,713
‫Sie immer alle Ihre Dokumente ausfüllen möchten.

153
00:08:19,130 --> 00:08:20,923
‫Also, lass es uns testen.

154
00:08:21,940 --> 00:08:23,993
‫Erstens, wenn es hier noch funktioniert.

155
00:08:24,840 --> 00:08:27,553
‫Und das tut es tatsächlich, also bekommen wir unsere beiden Benutzer.

156
00:08:28,530 --> 00:08:32,120
‫Und dann testen wir es hier, wo es vorher nicht

157
00:08:32,120 --> 00:08:36,060
‫funktioniert hat und jetzt funktioniert es, also hier ist das Ergebnis davon.

158
00:08:36,060 --> 00:08:38,790
‫Und jetzt, um sicherzustellen, dass es tatsächlich

159
00:08:38,790 --> 00:08:43,384
‫funktioniert, aktualisieren wir es und fügen im Grunde einen weiteren Reiseführer hinzu.

160
00:08:43,384 --> 00:08:48,320
‫Kopieren wir also die ID der Tour hierher und aktualisieren Sie dann die

161
00:08:49,300 --> 00:08:51,160
‫Tour, sodass wir die

162
00:08:51,160 --> 00:08:55,563
‫ID hier einfügen müssen, und dann im Hauptteil von create tour

163
00:08:58,140 --> 00:08:59,433
‫erhalten, also

164
00:09:02,040 --> 00:09:04,360
‫diese Anleitungen und hier einfügen, und

165
00:09:04,360 --> 00:09:07,410
‫dann müssen wir auch unsere holen anderer Benutzer.

166
00:09:07,410 --> 00:09:10,960
‫Also, es ist diese hier, die eigentlich kein Leitfaden oder

167
00:09:10,960 --> 00:09:14,710
‫nicht einmal ein Admin ist, aber dies ist immer noch nur

168
00:09:14,710 --> 00:09:16,933
‫zum Testen, also greifen wir

169
00:09:19,450 --> 00:09:22,423
‫diese ID und legen sie dann hier ab.

170
00:09:24,090 --> 00:09:28,640
‫Also, aktualisieren wir es, das funktioniert immer noch, und jetzt

171
00:09:28,640 --> 00:09:31,070
‫haben wir sogar in

172
00:09:31,070 --> 00:09:34,130
‫dieser Ausgabe bereits die aufgefüllten Daten.

173
00:09:34,130 --> 00:09:36,410
‫Okay, denn in unserem regulären Ausdruck

174
00:09:36,410 --> 00:09:38,300
‫haben wir find verwendet.

175
00:09:38,300 --> 00:09:42,450
‫Und so wird diese Aktualisierung hier mit find by id und

176
00:09:42,450 --> 00:09:45,465
‫update implementiert, und so beginnt sie auch mit

177
00:09:45,465 --> 00:09:49,110
‫find und daher gilt die Query-Middleware, die wir vorher

178
00:09:49,110 --> 00:09:51,690
‫waren, auch für diese Funktion.

179
00:09:51,690 --> 00:09:55,440
‫Okay und so funktioniert das Auffüllen.

180
00:09:55,440 --> 00:09:58,640
‫Okay, also noch einmal, extrem wichtiges Werkzeug

181
00:09:58,640 --> 00:10:01,200
‫in Ihrer Mongoose-Toolbox, in Ordnung.

182
00:10:01,200 --> 00:10:02,910
‫Und nur um sicher zu

183
00:10:02,910 --> 00:10:05,770
‫gehen, nehmen wir uns hier 15 Sekunden Zeit, um es zusammenzufassen.

184
00:10:05,770 --> 00:10:08,700
‫Dies ist also ein zweistufiger Prozess.

185
00:10:08,700 --> 00:10:12,080
‫Zuerst erstellen Sie eine Referenz zu einem anderen Modell.

186
00:10:12,080 --> 00:10:14,680
‫Damit erstellen Sie effektiv

187
00:10:14,680 --> 00:10:17,410
‫die Beziehung zwischen diesen beiden Datensätzen.

188
00:10:17,410 --> 00:10:20,349
‫Dann füllen Sie im zweiten Schritt das

189
00:10:20,349 --> 00:10:23,010
‫Feld aus, das Sie gerade

190
00:10:23,010 --> 00:10:26,920
‫zuvor angegeben haben, sodass die Guides die Methode populate verwenden.

191
00:10:26,920 --> 00:10:30,350
‫In Ordnung, also sehr einfach, sehr unkompliziert, alles, was Sie

192
00:10:30,350 --> 00:10:32,330
‫brauchen, ist die Logik

193
00:10:32,330 --> 00:10:34,620
‫dahinter wirklich zu verstehen und dann

194
00:10:34,620 --> 00:10:37,163
‫sind Sie bereit, es tatsächlich zu benutzen.

