﻿1
00:00:01,100 --> 00:00:02,450
‫Sprecher: Willkommen zurück.

2
00:00:02,450 --> 00:00:04,570
‫In diesem und dem

3
00:00:04,570 --> 00:00:06,820
‫nächsten Video möchte ich

4
00:00:06,820 --> 00:00:10,680
‫Ihnen die MongoDB-Aggregationspipeline vorstellen, die ein äußerst leistungsstarkes

5
00:00:10,680 --> 00:00:13,750
‫und äußerst nützliches MongoDB-Framework für die

6
00:00:13,750 --> 00:00:15,433
‫Datenaggregation ist.

7
00:00:17,180 --> 00:00:19,020
‫Und die Idee

8
00:00:19,020 --> 00:00:21,900
‫ist, dass wir im Grunde eine Pipeline

9
00:00:21,900 --> 00:00:24,070
‫definieren, die alle Dokumente einer

10
00:00:24,070 --> 00:00:26,470
‫bestimmten Sammlung durchlaufen, wo sie Schritt

11
00:00:26,470 --> 00:00:30,870
‫für Schritt verarbeitet werden, um sie in aggregierte Ergebnisse zu verwandeln.

12
00:00:30,870 --> 00:00:33,660
‫Wir können zum Beispiel die Aggregationspipeline verwenden,

13
00:00:33,660 --> 00:00:36,190
‫um Mittelwerte zu berechnen oder Minimal- und

14
00:00:36,190 --> 00:00:39,010
‫Maximalwerte zu berechnen oder wir können sogar

15
00:00:39,010 --> 00:00:41,380
‫Entfernungen berechnen und wir können wirklich

16
00:00:41,380 --> 00:00:43,590
‫alle möglichen Dinge tun.

17
00:00:43,590 --> 00:00:46,220
‫Es ist wirklich erstaunlich, wie

18
00:00:46,220 --> 00:00:48,440
‫leistungsfähig diese Aggregationspipeline ist.

19
00:00:48,440 --> 00:00:50,530
‫Okay, aber genug geredet.

20
00:00:50,530 --> 00:00:53,900
‫Beginnen wir nun tatsächlich mit der Verwendung der Aggregationspipeline

21
00:00:53,900 --> 00:00:57,122
‫und ich werde hier eine neue Header-Funktion erstellen, da

22
00:00:57,122 --> 00:01:00,290
‫wir später eine neue Route definieren und dann

23
00:01:00,290 --> 00:01:02,583
‫diese Funktion dafür verwenden werden.

24
00:01:03,610 --> 00:01:06,093
‫Aber diese neue Route werde ich später erstellen.

25
00:01:07,495 --> 00:01:09,720
‫Deshalb möchte ich hier eine

26
00:01:09,720 --> 00:01:13,756
‫Funktion erstellen, die ein paar Statistiken über unsere Touren berechnet.

27
00:01:13,756 --> 00:01:16,987
‫Also nenne ich das hier getTourStats.

28
00:01:19,070 --> 00:01:21,860
‫Okay, also Stats for Statistics, und

29
00:01:21,860 --> 00:01:23,770
‫es wird eine

30
00:01:23,770 --> 00:01:28,770
‫asynchrone Funktion sein, und so wird jetzt automatisch ein vs-Code vorausgefüllt.

31
00:01:29,140 --> 00:01:33,923
‫In Ordnung, lassen Sie uns hier einen catch-Block erstellen oder versuchen.

32
00:01:38,010 --> 00:01:41,970
‫Eigentlich kopiere ich das von hier oben,

33
00:01:41,970 --> 00:01:45,600
‫und jetzt werde ich hier eine Variable

34
00:01:45,600 --> 00:01:47,703
‫namens stats erstellen.

35
00:01:50,120 --> 00:01:54,600
‫Jetzt ist die Aggregationspipeline wirklich ein MongoDB-Feature.

36
00:01:54,600 --> 00:01:57,330
‫Aber Mongoose gibt uns natürlich Zugriff

37
00:01:57,330 --> 00:02:01,210
‫darauf, damit wir es im Mongoose-Treiber verwenden können, oder?

38
00:02:01,210 --> 00:02:04,070
‫Wenn Sie also unser Tourmodell verwenden,

39
00:02:04,070 --> 00:02:07,217
‫um auf die Toursammlung zuzugreifen, sagen

40
00:02:07,217 --> 00:02:10,053
‫wir Tour. Aggregat.

41
00:02:12,580 --> 00:02:15,250
‫Die Aggregationspipeline ist also ein

42
00:02:15,250 --> 00:02:18,847
‫bisschen wie eine normale Abfrage, und die Verwendung

43
00:02:18,847 --> 00:02:22,512
‫der Aggregationspipeline ist ein bisschen wie eine normale Abfrage.

44
00:02:22,512 --> 00:02:25,550
‫Der Unterschied besteht darin, dass wir bei Aggregationen,

45
00:02:25,550 --> 00:02:28,620
‫wie ich bereits erwähnt habe, die Daten in

46
00:02:28,620 --> 00:02:30,750
‫mehreren Schritten manipulieren können

47
00:02:30,750 --> 00:02:33,400
‫und wir diese Schritte nun tatsächlich definieren.

48
00:02:33,400 --> 00:02:37,093
‫Und dafür durchlaufen wir eine Reihe von sogenannten Etappen.

49
00:02:38,150 --> 00:02:41,050
‫Wir gehen also in einem Array vorbei, und dann

50
00:02:41,050 --> 00:02:43,110
‫haben wir hier viele Etappen.

51
00:02:43,110 --> 00:02:46,540
‫Und wieder durchlaufen die Dokumente dann nacheinander diese

52
00:02:46,540 --> 00:02:50,350
‫Stufen, Schritt für Schritt in der definierten Reihenfolge, wie

53
00:02:50,350 --> 00:02:52,462
‫wir sie hier definieren.

54
00:02:52,462 --> 00:02:54,860
‫Jedes der Elemente in diesem Array

55
00:02:54,860 --> 00:02:56,970
‫ist also eine der Stufen.

56
00:02:56,970 --> 00:02:59,470
‫Und es gibt eine Menge verschiedener Stufen, aus

57
00:02:59,470 --> 00:03:02,110
‫denen wir wählen können, aber ich werde Ihnen

58
00:03:02,110 --> 00:03:04,200
‫in diesem und auch im nächsten

59
00:03:04,200 --> 00:03:06,070
‫Vortrag nur die gängigsten nennen.

60
00:03:06,070 --> 00:03:08,400
‫Aber wie auch immer, ich

61
00:03:08,400 --> 00:03:11,500
‫möchte mir jetzt kurz die MongoDB-Dokumentation anschauen, weil ich

62
00:03:11,500 --> 00:03:13,853
‫glaube, das haben wir noch nicht gemacht.

63
00:03:17,285 --> 00:03:20,840
‫MongoDB und wir kennen diese Website bereits.

64
00:03:20,840 --> 00:03:24,460
‫Auf unserer MongoDB-Website gehen wir also hierher, um

65
00:03:24,460 --> 00:03:27,840
‫zu lernen, dann die Dokumentation und

66
00:03:27,840 --> 00:03:32,380
‫dann hier das MongoDB-Handbuch auszuwählen, und diese Dokumentation ist riesig.

67
00:03:32,380 --> 00:03:34,480
‫Es hat wirklich eine Menge Zeug hier

68
00:03:34,480 --> 00:03:36,450
‫drin und wenn Sie alles

69
00:03:36,450 --> 00:03:39,623
‫durchgehen würden, nun, dann würden Sie wirklich ein MongoDB-Meister werden.

70
00:03:40,600 --> 00:03:44,010
‫Es gibt Ihnen also eine schöne Einführung in MongoDB, Sie

71
00:03:44,010 --> 00:03:45,760
‫haben die Installation hier.

72
00:03:45,760 --> 00:03:49,610
‫Sie haben die CRUD-Operationen, also eine schöne Übersicht

73
00:03:49,610 --> 00:03:51,340
‫über viele Dinge,

74
00:03:51,340 --> 00:03:54,610
‫die wir bereits zuvor gelernt haben, oder?

75
00:03:54,610 --> 00:03:56,960
‫Dann haben Sie noch einiges über

76
00:03:57,800 --> 00:04:00,390
‫die Aggregation und insbesondere die Aggregationspipeline, über

77
00:04:00,390 --> 00:04:02,320
‫die wir jetzt sprechen

78
00:04:02,320 --> 00:04:04,730
‫werden, aber was ich Ihnen hier wirklich

79
00:04:04,730 --> 00:04:08,210
‫zeigen möchte, ist diese Referenz, die wir unten haben, weil

80
00:04:08,210 --> 00:04:10,750
‫in der Referenz, die wir hier haben

81
00:04:10,750 --> 00:04:12,880
‫Beispiel die Operatoren und dort haben

82
00:04:12,880 --> 00:04:16,570
‫wir viele wichtige Dinge, die wir die ganze Zeit verwendet haben.

83
00:04:16,570 --> 00:04:18,430
‫Schauen wir uns zum Beispiel

84
00:04:18,430 --> 00:04:22,200
‫hier die Abfrageoperatoren an und hier sehen Sie, wir haben diese Operatoren

85
00:04:22,200 --> 00:04:24,210
‫tatsächlich, die wir bereits verwendet haben.

86
00:04:24,210 --> 00:04:26,970
‫Also zum Beispiel größer oder gleich oder kleiner

87
00:04:26,970 --> 00:04:29,560
‫und gleich, aber wenn Sie eines Tages

88
00:04:29,560 --> 00:04:32,200
‫in Ihren eigenen Anwendungen einen anderen Operator benötigen,

89
00:04:32,200 --> 00:04:35,170
‫nun, jetzt wissen Sie, wo Sie ihn finden können.

90
00:04:35,170 --> 00:04:37,570
‫Natürlich ist es auch immer sehr

91
00:04:37,570 --> 00:04:40,370
‫hilfreich, einfach eine schnelle Google-Suche durchzuführen, wahrscheinlich

92
00:04:40,370 --> 00:04:43,490
‫einen Stack-Overflow-Post dazu zu finden, aber glauben Sie mir,

93
00:04:43,490 --> 00:04:45,687
‫oft ist es einfacher und

94
00:04:45,687 --> 00:04:49,790
‫schneller, einfach schnell in die Dokumentation zu springen und schnell nach

95
00:04:49,790 --> 00:04:52,763
‫dem zu suchen, was Sie suchen. wieder brauchen.

96
00:04:53,700 --> 00:04:56,350
‫Sie müssen nur wissen, wie die

97
00:04:56,350 --> 00:04:59,050
‫Dokumentation funktioniert, und wenn Sie das wissen, werden

98
00:04:59,050 --> 00:05:02,473
‫Sie ganz einfach finden, was Sie suchen, in Ordnung?

99
00:05:03,400 --> 00:05:05,570
‫Hier haben Sie auch einige logische

100
00:05:05,570 --> 00:05:08,920
‫Operatoren, zum Beispiel den OR-Operator, den wir bereits verwendet haben.

101
00:05:08,920 --> 00:05:13,920
‫Nochmals, wirklich viele Sachen, Geooperatoren und wir werden später

102
00:05:14,120 --> 00:05:16,790
‫einige verwenden, und ja,

103
00:05:16,790 --> 00:05:19,040
‫wirklich viele Sachen.

104
00:05:19,040 --> 00:05:22,280
‫Was ich Ihnen nach diesem Vortrag dann eigentlich zeigen wollte,

105
00:05:22,280 --> 00:05:24,793
‫sind die Stufen der Aggregation Pipeline.

106
00:05:26,680 --> 00:05:29,140
‫Hier haben Sie also viele davon

107
00:05:29,140 --> 00:05:32,090
‫und was wir in diesem Vortrag hier

108
00:05:32,090 --> 00:05:35,410
‫verwenden werden, ist Match, zum Beispiel und Gruppe,

109
00:05:35,410 --> 00:05:36,820
‫wo ist das?

110
00:05:36,820 --> 00:05:39,670
‫Ja Gruppe, das ist eine sehr wichtige, und wie

111
00:05:39,670 --> 00:05:41,660
‫ich bereits erwähnt habe, werde

112
00:05:41,660 --> 00:05:44,920
‫ich Ihnen die wichtigsten in diesem und im nächsten Vortrag zeigen.

113
00:05:44,920 --> 00:05:48,270
‫Aber auch hier, wenn Sie in einigen Fällen etwas anderes

114
00:05:48,270 --> 00:05:51,110
‫benötigen, dann gehen Sie einfach hierher zu dieser Dokumentation

115
00:05:51,110 --> 00:05:53,920
‫und Sie werden finden, wonach Sie suchen.

116
00:05:53,920 --> 00:05:54,753
‫Gut?

117
00:05:55,740 --> 00:05:58,630
‫Wie auch immer, lassen Sie uns jetzt lernen, wie wir eine

118
00:05:58,630 --> 00:06:00,940
‫dieser Phasen tatsächlich definieren können, in Ordnung?

119
00:06:00,940 --> 00:06:03,170
‫Und ich fange mit Match an.

120
00:06:03,170 --> 00:06:05,330
‫Und Match besteht im Wesentlichen

121
00:06:05,330 --> 00:06:07,890
‫darin, bestimmte Dokumente auszuwählen oder zu filtern.

122
00:06:07,890 --> 00:06:09,510
‫Und so ist es ganz einfach.

123
00:06:09,510 --> 00:06:13,210
‫Es ist wirklich wie ein Filterobjekt in MongoDB, wie

124
00:06:13,210 --> 00:06:16,380
‫wir es so oft verwendet haben.

125
00:06:16,380 --> 00:06:19,340
‫Jede der Stufen ist also ein

126
00:06:19,340 --> 00:06:22,750
‫Objekt und hier kommt der Name der Bühne.

127
00:06:22,750 --> 00:06:26,300
‫Das ist also die Match-Bühne, in Ordnung?

128
00:06:26,300 --> 00:06:29,603
‫Und wie gesagt, es ist wirklich nur eine Abfrage.

129
00:06:30,730 --> 00:06:33,570
‫Nehmen wir also zunächst an, dass wir nur

130
00:06:33,570 --> 00:06:35,200
‫Dokumente auswählen möchten, deren

131
00:06:35,200 --> 00:06:39,630
‫Bewertungsdurchschnitt größer oder gleich 4 ist. 5.

132
00:06:39,630 --> 00:06:41,110
‫Kannst du das also tun?

133
00:06:41,110 --> 00:06:43,560
‫Ich gebe Ihnen nur eine Sekunde, um das hier zu tun.

134
00:06:44,730 --> 00:06:46,123
‫Also ich hoffe du hast es geschafft.

135
00:06:47,090 --> 00:06:50,440
‫Der Durchschnitt der Bewertungen sollte also größer oder

136
00:06:52,240 --> 00:06:55,383
‫gleich 4 sein. 5.

137
00:06:56,460 --> 00:06:59,260
‫Das ist die erste Stufe.

138
00:06:59,260 --> 00:07:03,500
‫Und normalerweise ist diese Spielphase nur eine Vorphase, um sich

139
00:07:03,500 --> 00:07:07,050
‫dann auf die nächsten Phasen vorzubereiten, die bevorstehen.

140
00:07:07,050 --> 00:07:10,173
‫Der nächste ist also nun die Gruppenphase.

141
00:07:13,000 --> 00:07:14,610
‫Also gruppieren und dann

142
00:07:14,610 --> 00:07:17,840
‫dort hinein müssen wir immer nur ein weiteres Objekt übergeben.

143
00:07:17,840 --> 00:07:20,600
‫Es sieht also bei all diesen Objekten irgendwie seltsam aus,

144
00:07:20,600 --> 00:07:22,870
‫aber ja, das haben Sie schon einmal gesehen

145
00:07:22,870 --> 00:07:24,780
‫und MongoDB funktioniert einfach so.

146
00:07:24,780 --> 00:07:28,293
‫Es sind immer Objekte, innerhalb von Objekten, innerhalb von Objekten.

147
00:07:29,520 --> 00:07:32,690
‫Und in dieser Gruppe passiert hier die wahre Magie,

148
00:07:32,690 --> 00:07:34,520
‫denn wie der Name

149
00:07:34,520 --> 00:07:36,870
‫schon sagt, können wir Dokumente zusammenfassen, indem

150
00:07:36,870 --> 00:07:38,820
‫wir im Wesentlichen Akkumulatoren verwenden.

151
00:07:38,820 --> 00:07:40,600
‫Und ein Akkumulator

152
00:07:40,600 --> 00:07:42,850
‫berechnet zum Beispiel sogar einen Durchschnitt.

153
00:07:42,850 --> 00:07:46,270
‫Wenn wir also fünf Touren haben, von denen jede

154
00:07:46,270 --> 00:07:50,250
‫eine Bewertung hat, können wir die durchschnittliche Bewertung mithilfe der Gruppe berechnen.

155
00:07:50,250 --> 00:07:52,680
‫Und genau das machen wir hier.

156
00:07:52,680 --> 00:07:55,190
‫Als erstes müssen wir immer

157
00:07:55,190 --> 00:07:58,950
‫die ID angeben, da wir hier angeben, wonach

158
00:07:58,950 --> 00:08:00,803
‫wir gruppieren möchten.

159
00:08:02,420 --> 00:08:05,480
‫Vorerst sagen wir hier null, weil wir alles

160
00:08:05,480 --> 00:08:08,870
‫in einer Gruppe haben wollen, damit wir die Statistiken

161
00:08:08,870 --> 00:08:11,600
‫für alle Touren zusammen berechnen und nicht

162
00:08:11,600 --> 00:08:13,713
‫nach Gruppen trennen können.

163
00:08:14,590 --> 00:08:18,250
‫Wir werden etwas später dann auch nach verschiedenen Sachen gruppieren, zum

164
00:08:18,250 --> 00:08:21,010
‫Beispiel können wir nach dem Schwierigkeitsgrad gruppieren und

165
00:08:21,010 --> 00:08:23,900
‫wir können dann zum Beispiel den Durchschnitt für die

166
00:08:23,900 --> 00:08:26,820
‫leichten Touren, den Durchschnitt für die mittleren Touren und

167
00:08:26,820 --> 00:08:29,373
‫den Durchschnitt für die schweren Touren berechnen.

168
00:08:29,373 --> 00:08:32,720
‫Wir können also wieder nach einem unserer Felder gruppieren und

169
00:08:32,720 --> 00:08:35,750
‫dieses Feld werden wir hier spezifizieren, aber im

170
00:08:35,750 --> 00:08:39,000
‫Moment wollen wir, wie gesagt, diese Durchschnittswerte für alle

171
00:08:39,000 --> 00:08:41,803
‫Touren zusammen in einer großen Gruppe berechnen.

172
00:08:42,865 --> 00:08:46,990
‫In diesem Fall sagen wir also _id und setzen es auf null.

173
00:08:47,994 --> 00:08:51,600
‫Lassen Sie uns nun die durchschnittliche Bewertung berechnen.

174
00:08:51,600 --> 00:08:54,423
‫Um das zu tun, geben wir einfach

175
00:08:55,320 --> 00:08:58,713
‫ein neues Feld an, also nennen wir es einfach

176
00:09:01,080 --> 00:09:03,480
‫die durchschnittliche Bewertung, also so,

177
00:09:05,620 --> 00:09:07,160
‫und das wird

178
00:09:07,160 --> 00:09:11,560
‫gut, der Durchschnitt, der ein weiterer MongoDB-Operator ist, also dieser hier.

179
00:09:11,560 --> 00:09:14,233
‫Sie finden es in der Referenz, wenn Sie es nachschlagen.

180
00:09:15,149 --> 00:09:17,800
‫Dies ist also ein mathematischer Operator, der

181
00:09:17,800 --> 00:09:20,520
‫den Durchschnitt berechnet und nun den Namen des Feldes.

182
00:09:20,520 --> 00:09:23,530
‫Und wieder weiß ich, dass das sehr seltsam aussehen

183
00:09:23,530 --> 00:09:26,390
‫wird, aber um das Feld anzugeben, aus dem

184
00:09:26,390 --> 00:09:29,110
‫wir den Durchschnitt berechnen möchten, müssen wir das

185
00:09:29,110 --> 00:09:31,900
‫Dollarzeichen verwenden, aber hier und dann in Anführungszeichen

186
00:09:31,900 --> 00:09:33,583
‫den Namen des Felds.

187
00:09:34,560 --> 00:09:36,803
‫Die Bewertungen sind in diesem Fall also durchschnittlich.

188
00:09:39,316 --> 00:09:41,573
‫Und lassen Sie uns auch den Durchschnittspreis berechnen.

189
00:09:43,500 --> 00:09:47,143
‫Also Durchschnittspreis, und wieder, hier falsch gemacht, und so

190
00:09:48,200 --> 00:09:49,300
‫der Durchschnitt

191
00:09:50,870 --> 00:09:52,970
‫und dann wieder der Name

192
00:09:52,970 --> 00:09:55,170
‫des Feldes und in Anführungszeichen und

193
00:09:55,170 --> 00:09:56,470
‫mit diesem Dollarzeichen.

194
00:09:58,800 --> 00:10:00,890
‫Richtig, es sieht also wieder

195
00:10:00,890 --> 00:10:01,900
‫etwas seltsam

196
00:10:01,900 --> 00:10:04,510
‫aus, aber so funktioniert die Aggregationspipeline.

197
00:10:04,510 --> 00:10:06,300
‫Wir haben also den Durchschnittspreis.

198
00:10:06,300 --> 00:10:08,880
‫Lassen Sie uns eigentlich auch den

199
00:10:08,880 --> 00:10:12,560
‫Mindestpreis berechnen, also den kleinsten Preis, und den größten Preis.

200
00:10:12,560 --> 00:10:13,620
‫Also

201
00:10:15,439 --> 00:10:19,360
‫minPrice und von nun an wird alles ähnlich

202
00:10:19,360 --> 00:10:21,190
‫aussehen, also verwenden wir

203
00:10:22,200 --> 00:10:26,603
‫jetzt den min-Operator und dann wieder den Feldnamen wie folgt.

204
00:10:29,783 --> 00:10:32,530
‫Und hier ein Komma und lass uns dieses jetzt

205
00:10:32,530 --> 00:10:35,053
‫einfach duplizieren, um den Höchstpreis zu berechnen.

206
00:10:37,910 --> 00:10:40,310
‫Und jetzt werfen wir einen Blick auf das, was

207
00:10:40,310 --> 00:10:42,160
‫wir zu diesem Zeitpunkt bereits haben.

208
00:10:44,240 --> 00:10:47,430
‫Also müssen wir diese Antwort jetzt tatsächlich aussenden,

209
00:10:47,430 --> 00:10:49,250
‫und deshalb gehe ich

210
00:10:49,250 --> 00:10:53,513
‫noch einmal los und schnappe mir einige dieser bereits erfolgten Antworten hier.

211
00:10:59,154 --> 00:11:01,853
‫Die Daten, die wir versenden möchten, heißen also Statistiken.

212
00:11:06,740 --> 00:11:09,610
‫Und jetzt müssen wir nur noch eine neue Route

213
00:11:09,610 --> 00:11:12,390
‫hier in unsere Tourrouten hinzufügen und wieder werde

214
00:11:12,390 --> 00:11:14,543
‫ich hier ganz oben bearbeiten.

215
00:11:16,368 --> 00:11:18,690
‫Also Router. route

216
00:11:21,597 --> 00:11:26,597
‫/gettour, oder eigentlich nur tour-stats, einfach so, weil das

217
00:11:29,460 --> 00:11:33,730
‫Get bereits in der HTTP-Methode definiert ist.

218
00:11:33,730 --> 00:11:37,090
‫Sie müssen es also nicht im Namen wiederholen.

219
00:11:37,090 --> 00:11:38,640
‫Also tourController. getTourStats.

220
00:11:42,268 --> 00:11:46,707
‫Geben Sie ihm einen Safe und lassen Sie es uns jetzt tatsächlich testen.

221
00:11:48,270 --> 00:11:52,710
‫Ich bin also wirklich aufregend, es jetzt auszuprobieren, tatsächlich zu sehen,

222
00:11:52,710 --> 00:11:57,710
‫ob es funktioniert, denn es ist wieder wirklich ein erstaunliches und wirklich mächtiges

223
00:11:57,720 --> 00:11:59,370
‫Werkzeug, mit dem

224
00:11:59,370 --> 00:12:01,503
‫Sie so viel tun können.

225
00:12:03,130 --> 00:12:05,280
‫Also Tour-Statistiken, schick sie und

226
00:12:06,290 --> 00:12:09,000
‫das ist nicht wirklich das Ergebnis, auf das

227
00:12:09,000 --> 00:12:12,600
‫wir gewartet haben, also ist das nur die Pipeline, die wir

228
00:12:12,600 --> 00:12:15,750
‫definiert haben, aber ich weiß bereits, warum das so ist.

229
00:12:15,750 --> 00:12:18,950
‫Wir haben das Ergebnis also nicht abgewartet.

230
00:12:18,950 --> 00:12:21,410
‫Das ist im Grunde so,

231
00:12:21,410 --> 00:12:24,453
‫wie eine normale Abfrage ein aggregiertes Objekt zurückgibt.

232
00:12:25,857 --> 00:12:29,770
‫So . find wird eine Abfrage zurückgeben, und . Aggregat

233
00:12:29,770 --> 00:12:32,330
‫gibt ein Aggregatobjekt zurück.

234
00:12:32,330 --> 00:12:34,180
‫Und dann erst, wenn wir

235
00:12:34,180 --> 00:12:36,940
‫darauf warten, kommt es tatsächlich mit dem Ergebnis zurück.

236
00:12:36,940 --> 00:12:39,850
‫Deshalb haben wir diese Funktion hier auch als asynchrone Funktion

237
00:12:39,850 --> 00:12:42,640
‫definiert, damit wir dann dort wait verwenden können und

238
00:12:42,640 --> 00:12:44,953
‫hier ist dies der richtige Ort.

239
00:12:45,860 --> 00:12:47,950
‫Versuchen wir es nochmal.

240
00:12:47,950 --> 00:12:49,850
‫Und es geht los!

241
00:12:49,850 --> 00:12:51,250
‫So großartig!

242
00:12:51,250 --> 00:12:54,910
‫Wir haben die durchschnittliche Bewertung aller unserer Touren, wir

243
00:12:54,910 --> 00:12:56,720
‫haben den Durchschnittspreis, den

244
00:12:56,720 --> 00:13:01,720
‫Sie sehen, ist 1563 und dann das Minimum und das Maximum, richtig?

245
00:13:01,910 --> 00:13:04,210
‫Und anhand unserer Daten können

246
00:13:04,210 --> 00:13:06,410
‫wir dies tatsächlich bestätigen.

247
00:13:06,410 --> 00:13:07,770
‫So großartig!

248
00:13:07,770 --> 00:13:09,770
‫Wirklich, wirklich toll.

249
00:13:09,770 --> 00:13:11,950
‫Nun, eine weitere Sache, die ich

250
00:13:11,950 --> 00:13:14,450
‫hier machen möchte, ist, die Gesamtzahl der

251
00:13:14,450 --> 00:13:18,730
‫Bewertungen, die wir haben, und auch die Gesamtzahl der Touren zu berechnen.

252
00:13:18,730 --> 00:13:20,700
‫Also haben wir

253
00:13:20,700 --> 00:13:23,090
‫hier die durchschnittliche Bewertung

254
00:13:23,090 --> 00:13:27,323
‫und lass es uns eigentlich vorher machen,

255
00:13:28,850 --> 00:13:31,950
‫also numRatings, so und du

256
00:13:31,950 --> 00:13:36,950
‫kannst wahrscheinlich erraten, dass diese Summe heißt und dann

257
00:13:38,500 --> 00:13:43,500
‫die BewertungenAverage, oder eigentlich nicht ratingsAverage, sondern ratingsQuantity, oder?

258
00:13:43,610 --> 00:13:46,480
‫Hier wird also die Anzahl der Bewertungen

259
00:13:46,480 --> 00:13:49,354
‫gespeichert, und die Gesamtzahl der Bewertungen ist

260
00:13:49,354 --> 00:13:51,863
‫die Summe all dieser Werte.

261
00:13:52,840 --> 00:13:55,090
‫Und jetzt, die letzte, ist die Anzahl der

262
00:13:56,100 --> 00:13:57,880
‫Touren und diese ist etwas

263
00:13:57,880 --> 00:14:00,660
‫schwieriger, und daher ist es schön, Ihnen hier zu zeigen.

264
00:14:00,660 --> 00:14:04,570
‫Wir wollen also immer noch summieren, also im Grunde

265
00:14:04,570 --> 00:14:07,960
‫alles zusammenaddieren, also verwenden wir immer noch sum,

266
00:14:07,960 --> 00:14:10,340
‫aber was werden wir addieren?

267
00:14:10,340 --> 00:14:13,493
‫Nun, im Grunde fügen wir für jedes Dokument eine

268
00:14:14,443 --> 00:14:17,380
‫hinzu und sagen 1 und das war's.

269
00:14:17,380 --> 00:14:19,610
‫Im Grunde wird also

270
00:14:19,610 --> 00:14:22,020
‫für jedes Dokument, das diese Pipeline

271
00:14:22,020 --> 00:14:24,960
‫durchlaufen wird, eins zu diesem Nummernzähler hinzugefügt.

272
00:14:24,960 --> 00:14:29,430
‫Nennen wir es numTours.

273
00:14:29,430 --> 00:14:33,763
‫Also, ja, testen wir es jetzt noch einmal.

274
00:14:36,350 --> 00:14:39,320
‫Und tatsächlich bekommen wir unsere neun Touren und wissen

275
00:14:39,320 --> 00:14:41,303
‫bereits, dass wir neun haben.

276
00:14:42,650 --> 00:14:46,820
‫Das sind also alle Statistiken für alle Touren zusammen, aber jetzt gehen

277
00:14:46,820 --> 00:14:48,890
‫wir auf die nächste Stufe.

278
00:14:48,890 --> 00:14:52,450
‫Wie ich bereits sagte, können wir jetzt unsere Ergebnisse für

279
00:14:52,450 --> 00:14:53,790
‫verschiedene Bereiche gruppieren.

280
00:14:53,790 --> 00:14:56,870
‫Und fangen wir eigentlich mit der Schwierigkeit an.

281
00:14:56,870 --> 00:14:59,830
‫Das ist also ziemlich ähnlich, als würden Sie die Felder dort

282
00:14:59,830 --> 00:15:01,990
‫unten angeben, die einfach das Dollarzeichen und dann

283
00:15:01,990 --> 00:15:03,570
‫der Name des Felds sind.

284
00:15:03,570 --> 00:15:07,303
‫Also $Schwierigkeit, geben Sie ihm einen Safe und das war's.

285
00:15:08,350 --> 00:15:12,040
‫Senden Sie es hierher, und jetzt haben wir

286
00:15:12,040 --> 00:15:15,950
‫die Statistiken, die für jede dieser drei Schwierigkeiten definiert sind.

287
00:15:15,950 --> 00:15:18,200
‫Das ist also wirklich, wirklich erstaunlich.

288
00:15:18,200 --> 00:15:20,470
‫Das ist also der Teil, der mich umhaut.

289
00:15:20,470 --> 00:15:22,170
‫Es ist absolut fantastisch.

290
00:15:22,170 --> 00:15:25,020
‫Ich meine, Sie können anfangen, alle möglichen

291
00:15:25,020 --> 00:15:27,260
‫Dinge zu sehen, alle Arten

292
00:15:27,260 --> 00:15:30,890
‫von Datenmanipulationen, die Sie mit dieser Pipeline durchführen können, richtig?

293
00:15:30,890 --> 00:15:33,360
‫Wir können also jetzt wirklich anfangen, Dinge zu

294
00:15:33,360 --> 00:15:36,170
‫analysieren, zum Beispiel sehen wir, dass die einfachsten Touren

295
00:15:36,170 --> 00:15:38,640
‫diejenigen sind, die mit einer 4 die

296
00:15:38,640 --> 00:15:41,370
‫schlechtesten Bewertungen erhalten. 6, während die mittleren

297
00:15:41,370 --> 00:15:43,980
‫Touren diejenigen sind, die die höchsten Bewertungen erhalten.

298
00:15:43,980 --> 00:15:46,750
‫Wir können auch sehen, dass

299
00:15:46,750 --> 00:15:49,620
‫die schwierigen Touren mit einem Durchschnittspreis

300
00:15:49,620 --> 00:15:54,520
‫von 1997 die teuersten sind, während die einfachsten mit einem Preis

301
00:15:54,520 --> 00:15:58,010
‫von 1272 auch die günstigsten sind, oder?

302
00:15:58,010 --> 00:15:59,910
‫Wir sehen auch, dass die

303
00:15:59,910 --> 00:16:01,880
‫einfachsten Touren die sind, die wir

304
00:16:01,880 --> 00:16:05,400
‫am meisten haben, also vier leichte und nur zwei schwierige, oder?

305
00:16:05,400 --> 00:16:07,510
‫Damit können wir natürlich

306
00:16:07,510 --> 00:16:10,693
‫alle möglichen Einblicke in unsere Daten gewinnen.

307
00:16:12,350 --> 00:16:13,630
‫Lassen Sie uns

308
00:16:13,630 --> 00:16:16,583
‫diesen hier kommentieren und einfach einen anderen ausprobieren, zum

309
00:16:17,560 --> 00:16:20,130
‫Beispiel nach Bewertungen, warum nicht, probieren wir

310
00:16:20,130 --> 00:16:22,773
‫es einfach aus, sehen wir, was wir bekommen.

311
00:16:24,450 --> 00:16:26,310
‫So haben wir zum Beispiel zwei Touren, also grundsätzlich mit

312
00:16:26,310 --> 00:16:28,353
‫einer Bewertung von 4. 5, wir haben

313
00:16:29,530 --> 00:16:32,963
‫zwei Touren mit 4. 7, eine Tour mit 4. 8, und

314
00:16:34,040 --> 00:16:37,077
‫drei Touren mit 4. 9.

315
00:16:37,077 --> 00:16:39,870
‫Ach ja, und auch hier unten, eine Tour mit 4. 6, und

316
00:16:39,870 --> 00:16:42,320
‫so können wir zum Beispiel hier

317
00:16:42,320 --> 00:16:45,680
‫eine Erkenntnis gewinnen, dass die sehr teuren Touren

318
00:16:45,680 --> 00:16:49,103
‫mit diesem Durchschnittspreis von 1997 extrem gute Bewertungen erhalten.

319
00:16:50,260 --> 00:16:55,260
‫Also alle möglichen Sachen, die wir hier wirklich machen können.

320
00:16:55,360 --> 00:16:59,520
‫Lassen Sie uns diesen loswerden, fügen wir diesen wieder hinzu, und

321
00:16:59,520 --> 00:17:00,975
‫wir können jetzt

322
00:17:00,975 --> 00:17:03,180
‫sogar einige Operationen mit diesem durchführen.

323
00:17:03,180 --> 00:17:08,180
‫Lassen Sie uns diese Schwierigkeit also nur zum Spaß in Großbuchstaben schreiben.

324
00:17:08,550 --> 00:17:12,370
‫Das wird natürlich hier ein weiteres Objekt sein und

325
00:17:13,570 --> 00:17:15,810
‫hier vorne ist der Operator.

326
00:17:15,810 --> 00:17:18,873
‫Daher heißt der Operator in diesem Fall $toUpper.

327
00:17:21,150 --> 00:17:25,230
‫Also nur noch ein weiterer MongoDB-Operator.

328
00:17:25,230 --> 00:17:30,140
‫Also schau es dir an, und jetzt wird es in Großbuchstaben geschrieben.

329
00:17:30,140 --> 00:17:31,290
‫Groß!

330
00:17:31,290 --> 00:17:34,650
‫Wir haben hier also die Gruppenphase, die ziemlich abgeschlossen ist.

331
00:17:34,650 --> 00:17:38,180
‫Versuchen wir es also mit einer anderen, die eine Sortierstufe ist.

332
00:17:38,180 --> 00:17:42,120
‫Also ein weiteres Objekt in unserem Array für eine weitere

333
00:17:43,250 --> 00:17:45,380
‫Stufe, und dieses heißt sortieren.

334
00:17:45,380 --> 00:17:49,070
‫Also sortieren und dann dort hinein, wir brauchen noch ein weiteres Objekt,

335
00:17:49,070 --> 00:17:52,190
‫und es hat dieses irgendwie automatisch vervollständigt, ich weiß nicht

336
00:17:52,190 --> 00:17:54,860
‫warum, und hier können wir jetzt angeben, nach

337
00:17:54,860 --> 00:17:59,183
‫welchem Feld wir dies sortieren möchten, und lass uns das tatsächlich verwenden durchschnittlicher Preis.

338
00:18:00,580 --> 00:18:03,610
‫Und jetzt müssen wir hier bei der Sortierung tatsächlich die Feldnamen

339
00:18:03,610 --> 00:18:06,563
‫verwenden, die wir hier oben in der Gruppe angegeben haben.

340
00:18:07,520 --> 00:18:10,630
‫Wir können die alten Namen nicht mehr verwenden, da sie zu diesem

341
00:18:10,630 --> 00:18:11,930
‫Zeitpunkt bereits weg sind.

342
00:18:11,930 --> 00:18:13,610
‫Sie existieren nicht mehr.

343
00:18:13,610 --> 00:18:16,400
‫An diesem Punkt in der Aggregationspipeline

344
00:18:16,400 --> 00:18:19,410
‫haben wir diese Ergebnisse also wirklich bereits.

345
00:18:19,410 --> 00:18:22,790
‫Das sind nun im Grunde unsere Dokumente.

346
00:18:22,790 --> 00:18:25,960
‫Wenn Sie also nach dem Durchschnittspreis sortieren möchten, ist

347
00:18:25,960 --> 00:18:28,943
‫dies der Feldname, den wir verwenden müssen.

348
00:18:30,530 --> 00:18:33,070
‫Wir können also den Durchschnittspreis

349
00:18:33,070 --> 00:18:35,793
‫sagen und dann 1 für aufsteigend sagen.

350
00:18:37,680 --> 00:18:38,883
‫Also probieren wir das aus.

351
00:18:41,550 --> 00:18:43,070
‫Und ja, tatsächlich.

352
00:18:43,070 --> 00:18:46,480
‫Das ist das niedrigste und das ist das höchste.

353
00:18:46,480 --> 00:18:47,820
‫Groß!

354
00:18:47,820 --> 00:18:50,210
‫Also haben wir viel gemacht.

355
00:18:50,210 --> 00:18:53,480
‫Lassen Sie mich Ihnen nur zeigen, dass wir Etappen auch wiederholen können.

356
00:18:53,480 --> 00:18:55,710
‫Also lassen Sie uns hier tatsächlich ein

357
00:18:58,740 --> 00:19:00,930
‫weiteres Match machen und dieses ist

358
00:19:00,930 --> 00:19:03,240
‫wirklich nur, um Ihnen zu zeigen, dass wir

359
00:19:03,240 --> 00:19:07,130
‫tatsächlich Etappen wiederholen können, und ich möchte Ihnen auch einen anderen Operator zeigen.

360
00:19:07,130 --> 00:19:11,020
‫Lassen Sie uns jetzt nach ID auswählen und daran denken, dass die ID

361
00:19:11,020 --> 00:19:12,920
‫jetzt die Schwierigkeit ist, oder?

362
00:19:12,920 --> 00:19:15,023
‫Also haben wir das hier oben angegeben.

363
00:19:16,820 --> 00:19:20,670
‫Wir wollen also die ID und jetzt einen neuen Operator, den

364
00:19:20,670 --> 00:19:22,500
‫wir noch nicht verwendet haben.

365
00:19:22,500 --> 00:19:26,913
‫Wir wollen, dass es nicht gleich ist, und sagen wir einfach.

366
00:19:28,210 --> 00:19:29,830
‫Und so werden wir

367
00:19:29,830 --> 00:19:32,260
‫einfach alle Dokumente auswählen, die nicht einfach sind.

368
00:19:32,260 --> 00:19:33,880
‫Also in diesem Fall

369
00:19:33,880 --> 00:19:36,340
‫der, der mittel und schwer sagt, oder?

370
00:19:36,340 --> 00:19:41,007
‫Also im Grunde, abgesehen von dem, das einfach sagt, oder?

371
00:19:42,200 --> 00:19:43,790
‫Auch hier ist es

372
00:19:43,790 --> 00:19:47,950
‫nicht wirklich nützlich, da wir dadurch viele unserer aussagekräftigen Daten verlieren, aber

373
00:19:47,950 --> 00:19:50,090
‫nur um Ihnen zu zeigen, dass wir

374
00:19:50,090 --> 00:19:51,980
‫natürlich mehrere Matches durchführen können.

375
00:19:51,980 --> 00:19:54,750
‫In diesem Fall haben wir also einmal gematcht, bevor wir

376
00:19:54,750 --> 00:19:58,160
‫die Gruppe tatsächlich erstellt haben, und dann haben wir gematcht, als wir bereit

377
00:19:58,160 --> 00:19:59,475
‫waren, die Gruppierung durchzuführen.

378
00:19:59,475 --> 00:20:01,720
‫Lassen Sie uns das hier eigentlich

379
00:20:01,720 --> 00:20:03,798
‫aus unserer Aggregationspipeline herausnehmen, aber

380
00:20:03,798 --> 00:20:06,200
‫ich belasse es hier, damit Sie

381
00:20:06,200 --> 00:20:08,200
‫es als Referenz behalten.

382
00:20:09,580 --> 00:20:12,750
‫Versuchen Sie es noch einmal, versuchen Sie es noch einmal,

383
00:20:12,750 --> 00:20:14,730
‫und dies sind unsere Ergebnisse, um

384
00:20:14,730 --> 00:20:16,590
‫unsere Tourstatistiken zu erhalten.

385
00:20:16,590 --> 00:20:19,030
‫Also wirklich schön, wirklich toll.

386
00:20:19,030 --> 00:20:21,070
‫Ich hoffe, Ihnen hat dieses

387
00:20:21,070 --> 00:20:23,200
‫Video gefallen, und im nächsten werden

388
00:20:23,200 --> 00:20:26,810
‫wir die Aggregationspipeline tatsächlich weiter verwenden, um weitere Berechnungen durchzuführen.

389
00:20:26,810 --> 00:20:30,050
‫Und um dir noch ein paar verschiedene Etappen zu zeigen.

390
00:20:30,050 --> 00:20:31,973
‫Also bleib dran.

