﻿1
00:00:01,210 --> 00:00:02,660
‫Kursleiter: Bisher haben

2
00:00:02,660 --> 00:00:04,860
‫wir in diesem Abschnitt über Mongoose-Modelle,

3
00:00:04,860 --> 00:00:06,940
‫CRUD-Operationen mit Mongoose gesprochen, wir

4
00:00:06,940 --> 00:00:09,660
‫haben viele Abfragen durchgeführt und wir haben etwas

5
00:00:09,660 --> 00:00:12,820
‫über die Aggregationspipeline gelernt, aber jetzt kehren wir für

6
00:00:12,820 --> 00:00:15,110
‫die nächsten paar Videos zu unseren

7
00:00:15,110 --> 00:00:18,860
‫Daten zurück Modellieren und lernen Sie einige super nützliche Funktionen kennen,

8
00:00:18,860 --> 00:00:22,170
‫die Mongoose uns bietet, um unsere Daten zu modellieren.

9
00:00:22,170 --> 00:00:24,090
‫Und das erste, über das wir

10
00:00:24,090 --> 00:00:25,773
‫sprechen werden, sind virtuelle Immobilien.

11
00:00:27,410 --> 00:00:29,973
‫Und so öffnen wir unser Tourmodell hier.

12
00:00:31,050 --> 00:00:35,080
‫In Ordnung, jetzt sind virtuelle Eigenschaften im Grunde Felder, die wir

13
00:00:35,080 --> 00:00:37,030
‫in unserem Schema definieren

14
00:00:37,030 --> 00:00:39,150
‫können, aber die nicht beibehalten werden.

15
00:00:39,150 --> 00:00:42,100
‫Sie werden also nicht in der Datenbank gespeichert,

16
00:00:42,100 --> 00:00:44,720
‫um uns dort Platz zu sparen.

17
00:00:44,720 --> 00:00:46,140
‫Und meistens wollen

18
00:00:46,140 --> 00:00:49,260
‫wir unsere Daten natürlich auch wirklich in der

19
00:00:49,260 --> 00:00:51,700
‫Datenbank speichern, aber für Felder, die

20
00:00:51,700 --> 00:00:55,090
‫voneinander abgeleitet werden können, sind virtuelle Eigenschaften sehr sinnvoll.

21
00:00:55,090 --> 00:00:58,410
‫Zum Beispiel eine Umrechnung von Meilen in Kilometer, es macht

22
00:00:58,410 --> 00:01:00,720
‫keinen Sinn, diese beiden Felder in

23
00:01:00,720 --> 00:01:03,260
‫einer Datenbank zu speichern, wenn wir einfach

24
00:01:03,260 --> 00:01:05,750
‫eines in das andere umrechnen können, oder?

25
00:01:05,750 --> 00:01:09,140
‫Okay, also definieren wir jetzt eine virtuelle Eigenschaft, die

26
00:01:09,140 --> 00:01:11,680
‫die Tourdauer in Wochen enthält.

27
00:01:11,680 --> 00:01:13,800
‫Und das ist im Grunde ein

28
00:01:13,800 --> 00:01:16,460
‫Feld, das wir sehr leicht von der Dauer, die

29
00:01:16,460 --> 00:01:18,970
‫wir bereits haben, in Tage umrechnen können, oder?

30
00:01:18,970 --> 00:01:20,523
‫Und so funktioniert es.

31
00:01:22,160 --> 00:01:25,640
‫Wir definieren diese virtuellen Eigenschaften auf dem Tour-Schema,

32
00:01:25,640 --> 00:01:30,640
‫und so sagen wir tourSchema. virtual und dann den Namen der

33
00:01:33,430 --> 00:01:34,763
‫virtuellen Eigenschaft.

34
00:01:36,530 --> 00:01:39,300
‫Nennen wir es also Dauer Wochen,

35
00:01:39,300 --> 00:01:42,950
‫und dann müssen wir die Methode get definieren.

36
00:01:42,950 --> 00:01:45,600
‫Und das nur, weil diese virtuelle Eigenschaft

37
00:01:45,600 --> 00:01:47,580
‫hier im Grunde jedes Mal

38
00:01:47,580 --> 00:01:50,560
‫erstellt wird, wenn wir Daten aus der Datenbank holen.

39
00:01:50,560 --> 00:01:54,273
‫Daher wird diese Get-Funktion hier Getter genannt.

40
00:01:54,273 --> 00:01:57,090
‫Jetzt übergeben wir hier eine Funktion,

41
00:01:57,090 --> 00:01:58,400
‫und tatsächlich

42
00:01:58,400 --> 00:02:02,460
‫wird diese Rückruffunktion eine echte Funktion sein, also keine

43
00:02:02,460 --> 00:02:05,672
‫Pfeilfunktion, und ich werde Ihnen gleich erklären, warum.

44
00:02:05,672 --> 00:02:08,500
‫Wie definieren wir nun grundsätzlich

45
00:02:08,500 --> 00:02:10,810
‫die virtuelle Eigenschaft?

46
00:02:10,810 --> 00:02:13,420
‫Nun, es ist ganz einfach, wir müssen nur

47
00:02:13,420 --> 00:02:18,280
‫sagen, dass wir dies zurückgeben wollen, . Dauer in diesem Fall durch

48
00:02:18,280 --> 00:02:19,833
‫sieben geteilt.

49
00:02:21,020 --> 00:02:24,350
‫So berechnen wir die Dauer in Wochen, also die Dauer

50
00:02:24,350 --> 00:02:26,730
‫in Tagen geteilt durch sieben, weil die

51
00:02:26,730 --> 00:02:29,110
‫Woche sieben Tage hat, und das ist

52
00:02:29,110 --> 00:02:31,030
‫dann die Dauer in Wochen.

53
00:02:31,030 --> 00:02:33,510
‫Wenn eine Tour zum Beispiel sieben Tage hat,

54
00:02:33,510 --> 00:02:35,730
‫dann ist es natürlich eine Woche.

55
00:02:35,730 --> 00:02:38,360
‫Jetzt habe ich diese reguläre Funktion hier

56
00:02:38,360 --> 00:02:41,250
‫verwendet, weil Sie sich erinnern, dass eine Pfeilfunktion

57
00:02:41,250 --> 00:02:43,060
‫kein eigenes Festplattenschlüsselwort erhält.

58
00:02:43,060 --> 00:02:45,800
‫Hier brauchen wir tatsächlich das Disk-Schlüsselwort,

59
00:02:45,800 --> 00:02:48,470
‫da das Disk-Schlüsselwort in

60
00:02:48,470 --> 00:02:51,588
‫diesem Fall auf das aktuelle Dokument verweist.

61
00:02:51,588 --> 00:02:54,640
‫Wenn wir dies also verwenden

62
00:02:54,640 --> 00:02:58,714
‫möchten, sollten wir normalerweise immer eine reguläre Funktion verwenden.

63
00:02:58,714 --> 00:03:01,140
‫Also wirklich überall in Mongoose werde

64
00:03:01,140 --> 00:03:04,340
‫ich immer diese normalen Funktionen verwenden, an die

65
00:03:04,340 --> 00:03:06,061
‫wir gewöhnt sind.

66
00:03:06,061 --> 00:03:11,061
‫Also speichern Sie hier, und das war's.

67
00:03:11,070 --> 00:03:13,180
‫So definieren wir Dauerwochen, die

68
00:03:13,180 --> 00:03:15,660
‫nicht in der Datenbank gespeichert werden,

69
00:03:15,660 --> 00:03:19,150
‫sondern nur da sein werden, sobald wir die Daten erhalten.

70
00:03:19,150 --> 00:03:21,820
‫Im Moment wird es tatsächlich noch nicht da

71
00:03:21,820 --> 00:03:24,610
‫sein, weil hier ein Stück fehlt, also lasst

72
00:03:24,610 --> 00:03:27,243
‫mich damit beginnen, es euch zu zeigen.

73
00:03:28,760 --> 00:03:31,240
‫Wenn wir also versuchen, alle Touren zu bekommen,

74
00:03:31,240 --> 00:03:34,050
‫werden Sie feststellen, dass die Dauer von Wochen hier

75
00:03:34,050 --> 00:03:35,768
‫nirgendwo zu finden ist.

76
00:03:35,768 --> 00:03:38,660
‫Und das liegt daran, dass wir in unserem Schema explizit

77
00:03:38,660 --> 00:03:41,740
‫definieren müssen, dass wir die virtuellen Eigenschaften in unserer Ausgabe

78
00:03:41,740 --> 00:03:42,683
‫haben möchten.

79
00:03:43,758 --> 00:03:48,758
‫Und erinnern Sie sich, wie ich das diesem Mungo gesagt habe. schema können wir nicht nur

80
00:03:49,320 --> 00:03:51,650
‫das Objekt mit

81
00:03:51,650 --> 00:03:54,050
‫der Schemadefinition selbst übergeben, sondern

82
00:03:54,050 --> 00:03:56,943
‫auch ein Objekt für die Schemaoptionen.

83
00:03:58,070 --> 00:04:00,579
‫Und fügen wir das hier am

84
00:04:00,579 --> 00:04:04,810
‫Ende hinzu, also ist dieses erste Objekt hier die Schemadefinition und jetzt

85
00:04:04,810 --> 00:04:07,630
‫das zweite ein Objekt für die Optionen.

86
00:04:07,630 --> 00:04:11,260
‫Und was wir hier angeben müssen, sind die beiden JSON-Eigenschaften

87
00:04:12,390 --> 00:04:15,410
‫hier, und was wir dann sagen ist, dass

88
00:04:15,410 --> 00:04:19,453
‫wir jedes Mal, wenn die Daten tatsächlich als JSON ausgegeben werden,

89
00:04:20,480 --> 00:04:22,710
‫möchten, dass Virtuals wahr sind.

90
00:04:23,681 --> 00:04:26,657
‫Also im Grunde die Virtuals, um Teil der Ausgabe zu sein.

91
00:04:27,800 --> 00:04:30,000
‫Und jetzt kopiere ich das, weil

92
00:04:30,000 --> 00:04:31,923
‫wir auch Einspruch erheben wollen.

93
00:04:33,370 --> 00:04:36,037
‫Also im Grunde, wenn die Daten als

94
00:04:36,037 --> 00:04:37,320
‫Objekt ausgegeben werden.

95
00:04:37,320 --> 00:04:40,010
‫Wenn wir also jetzt hierher zurückkehren, sollten

96
00:04:40,010 --> 00:04:41,993
‫wir Dauerwochen sehen können.

97
00:04:43,120 --> 00:04:46,550
‫Warten wir es ab, und tatsächlich ist es hier.

98
00:04:46,550 --> 00:04:51,053
‫Es sind also fünf Tage und das ist 0. 71 Wochen.

99
00:04:52,250 --> 00:04:55,800
‫Hier haben wir sieben Tage, also eine Woche.

100
00:04:55,800 --> 00:04:59,810
‫Okay, das funktioniert tatsächlich, großartig.

101
00:04:59,810 --> 00:05:01,680
‫Eine Sache, die wir

102
00:05:01,680 --> 00:05:04,840
‫beachten müssen, ist, dass wir diese virtuelle Eigenschaft hier

103
00:05:04,840 --> 00:05:07,840
‫nicht in einer Abfrage verwenden können, da sie

104
00:05:07,840 --> 00:05:09,980
‫technisch nicht Teil der Datenbank ist.

105
00:05:09,980 --> 00:05:11,370
‫So können

106
00:05:11,370 --> 00:05:16,370
‫wir zB Tour nicht sagen. Finden Sie heraus, wo Dauer Wochen gleich eins ist.

107
00:05:16,618 --> 00:05:19,660
‫Das wird wieder nicht funktionieren, weil diese Eigenschaft

108
00:05:19,660 --> 00:05:22,520
‫nicht wirklich Teil der Datenbank ist.

109
00:05:22,520 --> 00:05:25,330
‫Nun hätten wir diese Konvertierung natürlich auch jedes

110
00:05:25,330 --> 00:05:28,450
‫Mal durchführen können, nachdem wir die Daten abgefragt haben,

111
00:05:28,450 --> 00:05:30,890
‫beispielsweise wie in einem Controller,

112
00:05:30,890 --> 00:05:34,240
‫aber das wäre nicht die beste Vorgehensweise, nur weil wir

113
00:05:34,240 --> 00:05:36,960
‫versuchen möchten, Geschäftslogik und Anwendungslogik so weit

114
00:05:36,960 --> 00:05:39,830
‫getrennt zu halten wie möglich, erinnerst du dich?

115
00:05:39,830 --> 00:05:42,980
‫Das war also das ganze Gerede über fette

116
00:05:42,980 --> 00:05:46,950
‫Modelle und dünne Controller, über das wir vorhin gesprochen haben

117
00:05:46,950 --> 00:05:48,850
‫und das besagt, dass

118
00:05:48,850 --> 00:05:52,390
‫wir Modelle mit so viel Geschäftslogik wie möglich haben

119
00:05:52,390 --> 00:05:54,460
‫sollten und dünne Controller mit

120
00:05:54,460 --> 00:05:56,598
‫so wenig Geschäftslogik wie möglich.

121
00:05:56,598 --> 00:05:59,840
‫Und so sind virtuelle Immobilien wie diese tatsächlich ein gutes

122
00:05:59,840 --> 00:06:01,970
‫Beispiel dafür, wie wir diese Art

123
00:06:01,970 --> 00:06:03,483
‫von Architektur erreichen können.

124
00:06:04,410 --> 00:06:06,460
‫Die Dauer in Wochen zu kennen ist

125
00:06:06,460 --> 00:06:09,070
‫also eine Geschäftslogik, da sie mit dem Geschäft

126
00:06:09,070 --> 00:06:11,900
‫selbst zu tun hat, nicht mit Dingen wie Anfragen oder

127
00:06:11,900 --> 00:06:14,550
‫Antworten, und daher führen wir die Berechnung direkt im

128
00:06:14,550 --> 00:06:16,460
‫Modell durch, wo sie hingehört und

129
00:06:16,460 --> 00:06:17,863
‫nicht im Controller.

