﻿1
00:00:01,100 --> 00:00:03,780
‫Instruktur: Sekarang mari kita gunakan proses

2
00:00:03,780 --> 00:00:06,610
‫yang disebut populate untuk benar-benar mendapatkan akses ke

3
00:00:06,610 --> 00:00:10,173
‫pemandu wisata yang direferensikan setiap kali kita menanyakan tur tertentu.

4
00:00:11,820 --> 00:00:14,290
‫Jadi, di video terakhir, kami

5
00:00:14,290 --> 00:00:17,660
‫membuat referensi ke pengguna, di sini, di bidang panduan

6
00:00:17,660 --> 00:00:20,180
‫ini, tepat di model tur kami, bukan?

7
00:00:20,180 --> 00:00:22,840
‫Dan sekarang kita akan menggunakan populate untuk

8
00:00:22,840 --> 00:00:25,610
‫pada dasarnya mengganti bidang yang kita referensikan

9
00:00:25,610 --> 00:00:28,210
‫dengan data terkait yang sebenarnya.

10
00:00:28,210 --> 00:00:30,330
‫Dan hasilnya akan terlihat

11
00:00:30,330 --> 00:00:32,920
‫seolah-olah data selalu disematkan, padahal sebenarnya

12
00:00:32,920 --> 00:00:35,100
‫seperti yang kita tahu, itu

13
00:00:35,100 --> 00:00:38,280
‫ada dalam koleksi yang sama sekali berbeda, oke?

14
00:00:38,280 --> 00:00:41,940
‫Sekarang, proses mengisi selalu terjadi dalam kueri.

15
00:00:41,940 --> 00:00:44,713
‫Jadi sekarang mari kita pergi ke pengontrol

16
00:00:46,000 --> 00:00:50,340
‫tur kita, dan kemudian langsung ke fungsi di mana kita mendapatkan satu tur.

17
00:00:50,340 --> 00:00:52,460
‫Jadi di sini, di dapatkan tur.

18
00:00:52,460 --> 00:00:55,440
‫Dan inilah pertanyaan kami, bukan?

19
00:00:55,440 --> 00:00:57,831
‫Jadi di sini, di sinilah kami membangun kueri kami.

20
00:00:57,831 --> 00:01:00,450
‫Dan sekarang yang perlu kita lakukan adalah

21
00:01:00,450 --> 00:01:02,183
‫menambahkan populasi ke kueri.

22
00:01:04,370 --> 00:01:07,440
‫Jadi isi, lalu nama bidang yang sebenarnya

23
00:01:07,440 --> 00:01:09,250
‫ingin kita isi

24
00:01:10,490 --> 00:01:12,533
‫dan itu disebut panduan, oke?

25
00:01:13,950 --> 00:01:17,850
‫Dan jika dipikir-pikir, nama ini sebenarnya masuk akal.

26
00:01:17,850 --> 00:01:21,080
‫Jadi kami ingin mengisi jadi pada dasarnya

27
00:01:21,080 --> 00:01:24,940
‫untuk mengisi bidang yang disebut panduan dalam model kami.

28
00:01:24,940 --> 00:01:27,870
‫Benar, jadi sekali lagi, bidang panduan

29
00:01:27,870 --> 00:01:29,860
‫ini hanya berisi referensi.

30
00:01:29,860 --> 00:01:32,620
‫dan dengan mengisi kita kemudian akan

31
00:01:32,620 --> 00:01:36,750
‫mengisinya dengan data yang sebenarnya, baik dan lagi hanya di

32
00:01:36,750 --> 00:01:39,890
‫query dan tidak di database yang sebenarnya, oke?

33
00:01:39,890 --> 00:01:41,840
‫Jadi, ini benar-benar semua yang perlu kita lakukan.

34
00:01:41,840 --> 00:01:46,760
‫Dan sekarang mari kita lihat hasilnya, oke?

35
00:01:46,760 --> 00:01:51,760
‫Jadi, ini adalah id dari tur dan mari kita ingat bahwa

36
00:01:51,840 --> 00:01:55,370
‫ini adalah bagaimana panduan terlihat sekarang, oke?

37
00:01:55,370 --> 00:01:59,323
‫Tapi kalau sekarang kita sudah dapat tour dan dengan

38
00:02:01,170 --> 00:02:03,260
‫id itu, maka kita

39
00:02:03,260 --> 00:02:07,220
‫tunggu saja, dan memang, ini dia data tentang guidenya.

40
00:02:07,220 --> 00:02:10,720
‫Oke, jadi dua elemen yang sudah kita miliki

41
00:02:10,720 --> 00:02:14,600
‫di panduan ini, sekarang telah diisi dengan data sebenarnya.

42
00:02:14,600 --> 00:02:17,373
‫Dan jika sekarang kita melihat pada get

43
00:02:18,550 --> 00:02:21,933
‫all tour, mari kita singkirkan beberapa hal ini di sini.

44
00:02:22,842 --> 00:02:25,073
‫Kami memiliki terlalu banyak barang terbuka di sini.

45
00:02:26,010 --> 00:02:28,423
‫Jadi jika kita sekarang mendapatkan semua tur,

46
00:02:29,730 --> 00:02:31,820
‫oke, maka mari kita gulir ke

47
00:02:31,820 --> 00:02:33,280
‫akhir di mana

48
00:02:36,030 --> 00:02:38,590
‫yang baru seharusnya dan ternyata sekarang baik-baik saja,

49
00:02:38,590 --> 00:02:40,690
‫oh itu karena saya memiliki filter

50
00:02:41,840 --> 00:02:46,610
‫ini di sini, mari kita singkirkan itu, dan sekarang saya memiliki 10 hasil dan

51
00:02:46,610 --> 00:02:49,270
‫sebenarnya itu di sini, jadi tur uji baru.

52
00:02:49,270 --> 00:02:52,290
‫Dan sekarang Anda melihat bahwa di sini ia

53
00:02:52,290 --> 00:02:55,860
‫kembali menunjukkan kepada kita hanya nilai-nilai yang sebenarnya ada dalam database.

54
00:02:55,860 --> 00:02:58,010
‫Jadi mari kita konfirmasikan juga di sini di Kompas.

55
00:03:01,940 --> 00:03:05,200
‫Dan memang, seperti yang Anda lihat, kami masih

56
00:03:05,200 --> 00:03:09,750
‫tidak memiliki data aktual di sini di database, tetapi hanya benar-benar id.

57
00:03:09,750 --> 00:03:13,290
‫Oke, dan hanya langkah mengisi yang kemudian akan mengganti

58
00:03:13,290 --> 00:03:16,540
‫id ini dengan data yang sebenarnya, oke?

59
00:03:16,540 --> 00:03:18,740
‫Jadi di sini, itu tidak

60
00:03:18,740 --> 00:03:21,260
‫terjadi dengan baik karena, kami tidak

61
00:03:21,260 --> 00:03:24,200
‫menerapkan populasi di handler rute get all tours.

62
00:03:24,200 --> 00:03:27,950
‫Oke, sekarang saya akan menunjukkan trik kecil yang bisa

63
00:03:27,950 --> 00:03:30,490
‫kita lakukan dengan fungsi populate.

64
00:03:30,490 --> 00:03:33,590
‫Yang sebenarnya juga hanya memilih bidang tertentu.

65
00:03:33,590 --> 00:03:38,370
‫Jadi misalnya, kami tidak tertarik dengan properti v ini di sini dan

66
00:03:38,370 --> 00:03:41,350
‫juga tidak pada passwordChangedAt kan, jadi bukan

67
00:03:41,350 --> 00:03:42,683
‫itu jenis data

68
00:03:42,683 --> 00:03:45,660
‫yang kami inginkan tentang pemandu wisata kami.

69
00:03:45,660 --> 00:03:49,197
‫Jadi di sini di populate, kita sebenarnya bisa menentukan itu.

70
00:03:49,197 --> 00:03:52,230
‫Jadi alih-alih hanya meneruskan string, kita

71
00:03:52,230 --> 00:03:55,280
‫dapat membuat objek opsi dan kemudian

72
00:03:56,620 --> 00:03:57,793
‫kita dapat

73
00:03:59,440 --> 00:04:02,850
‫mengatakan, jalurnya adalah panduan, jadi pada dasarnya,

74
00:04:02,850 --> 00:04:07,850
‫nama bidang yang ingin kita ganti, dan kemudian, seperti biasa,

75
00:04:09,800 --> 00:04:11,553
‫kita dapat menggunakan

76
00:04:12,710 --> 00:04:16,970
‫pilih , dan kemudian minus, yang ini di sini

77
00:04:16,970 --> 00:04:21,790
‫dan juga, yang lainnya, jadi passwordChangedAt, lebih mudah untuk menyalin,

78
00:04:21,790 --> 00:04:25,370
‫baiklah, jadi mari kita ubah di sini,

79
00:04:25,370 --> 00:04:27,603
‫dan kirim ini lagi.

80
00:04:28,600 --> 00:04:31,800
‫Dan ini tentu saja, bukan rute yang benar, jadi

81
00:04:31,800 --> 00:04:35,910
‫maaf untuk itu, saya pikir saya juga menggunakannya sebelumnya sebenarnya di mana

82
00:04:35,910 --> 00:04:38,143
‫sebenarnya saya ingin menunjukkan yang ini

83
00:04:39,040 --> 00:04:42,970
‫kepada Anda, benar, dan sangat menyesal untuk itu, tapi tetap saja apa

84
00:04:42,970 --> 00:04:45,920
‫yang ingin kami singkirkan dari sini adalah V

85
00:04:45,920 --> 00:04:47,510
‫ini dan passwordChangedAt ini.

86
00:04:47,510 --> 00:04:49,230
‫Dan kami sudah

87
00:04:49,230 --> 00:04:51,737
‫melakukannya, jadi jika kami mengirimnya sekarang,

88
00:04:51,737 --> 00:04:55,810
‫tentu saja kami hanya mendapatkan data yang kami minati.

89
00:04:55,810 --> 00:04:58,540
‫Baiklah, jadi fungsi mengisi ini adalah

90
00:04:58,540 --> 00:05:01,110
‫alat yang sangat mendasar untuk bekerja

91
00:05:01,110 --> 00:05:03,160
‫dengan data di Mongoose.

92
00:05:03,160 --> 00:05:04,790
‫Dan terutama tentu saja

93
00:05:04,790 --> 00:05:06,760
‫ketika ada hubungan antar data,

94
00:05:06,760 --> 00:05:09,860
‫oke, jadi Anda harus selalu tahu persis bagaimana dan

95
00:05:09,860 --> 00:05:12,220
‫kapan menggunakannya untuk aplikasi Anda sendiri.

96
00:05:12,220 --> 00:05:15,040
‫Dan untuk melatihnya, tentu saja kita

97
00:05:15,040 --> 00:05:18,200
‫akan menggunakannya berkali-kali di seluruh bagian ini.

98
00:05:18,200 --> 00:05:21,140
‫Sekarang hanya satu hal yang saya ingin Anda

99
00:05:21,140 --> 00:05:24,280
‫ingat, adalah bahwa di balik layar, menggunakan populate

100
00:05:24,280 --> 00:05:26,300
‫akan tetap benar-benar membuat

101
00:05:26,300 --> 00:05:29,290
‫kueri baru, sehingga ini dapat memengaruhi kinerja Anda.

102
00:05:29,290 --> 00:05:31,985
‫Oke, tentu saja jika Anda hanya melakukannya

103
00:05:31,985 --> 00:05:35,430
‫sekali atau dua kali dan dalam jenis aplikasi kecil, maka pukulan

104
00:05:35,430 --> 00:05:38,170
‫kecil pada kinerja itu bukanlah masalah besar sama sekali.

105
00:05:38,170 --> 00:05:40,944
‫Tetapi dalam aplikasi yang sangat besar, dengan

106
00:05:40,944 --> 00:05:43,469
‫banyak populasi di semua tempat,

107
00:05:43,469 --> 00:05:46,450
‫maka itu mungkin memang memiliki semacam efek, oke?

108
00:05:46,450 --> 00:05:47,960
‫Jadi ingatlah itu.

109
00:05:47,960 --> 00:05:51,430
‫Oke, dan memang masuk akal, kan karena

110
00:05:51,430 --> 00:05:54,700
‫bagaimana lagi Mongoose bisa mendapatkan data tentang

111
00:05:54,700 --> 00:05:57,700
‫tur dan pengguna secara bersamaan.

112
00:05:57,700 --> 00:06:01,050
‫Perlu membuat kueri baru pada dasarnya

113
00:06:01,050 --> 00:06:03,960
‫untuk dapat membuat koneksi ini.

114
00:06:03,960 --> 00:06:06,060
‫Oke dan sekarang hanya untuk menyelesaikan ini,

115
00:06:06,060 --> 00:06:07,763
‫mari kita ingat apa yang

116
00:06:07,763 --> 00:06:11,610
‫saya tunjukkan kepada Anda bahwa ini sebenarnya tidak berhasil ketika kita mendapatkan semua tur.

117
00:06:11,610 --> 00:06:15,460
‫Jadi, ingat bagaimana dalam situasi ini, kami masih

118
00:06:15,460 --> 00:06:18,620
‫hanya mendapatkan id pemandu wisata dan bukan

119
00:06:18,620 --> 00:06:20,850
‫data pengguna yang dirujuk.

120
00:06:20,850 --> 00:06:24,050
‫Oke, dan salah satu solusi pada dasarnya adalah

121
00:06:24,050 --> 00:06:27,956
‫menyalin kode ini di sini, jadi fungsi pengisian ini, juga

122
00:06:27,956 --> 00:06:30,950
‫di sini ke pengendali rute ini,

123
00:06:30,950 --> 00:06:34,390
‫tetapi tentu saja, kode duplikat bukanlah ide yang baik.

124
00:06:34,390 --> 00:06:35,635
‫Dan saya harap Anda

125
00:06:35,635 --> 00:06:39,640
‫sudah tahu pada titik ini tentang cara yang lebih baik untuk melakukan ini.

126
00:06:39,640 --> 00:06:42,310
‫Dan jawabannya adalah query middleware.

127
00:06:42,310 --> 00:06:46,833
‫Oke, jadi mari kita lanjutkan dan pindah ke model kita, dan saya

128
00:06:47,910 --> 00:06:49,620
‫menyalin kode ini di

129
00:06:51,731 --> 00:06:55,253
‫sini sekarang dan, ya, mari kita lakukan di sini.

130
00:06:57,580 --> 00:06:58,413
‫Jadi,

131
00:06:59,430 --> 00:07:03,460
‫pra dan kemudian saya akan benar-benar seperti sebelumnya melakukannya

132
00:07:03,460 --> 00:07:06,640
‫dengan ekspresi reguler, yang kemudian akan bekerja

133
00:07:06,640 --> 00:07:09,363
‫untuk semua yang dimulai dengan find.

134
00:07:11,830 --> 00:07:13,083
‫Jadi, seperti

135
00:07:17,010 --> 00:07:21,500
‫ini, Oke, dan tentu saja, kami melakukan ini di middleware

136
00:07:21,500 --> 00:07:23,820
‫kueri, karena ini adalah jenis

137
00:07:23,820 --> 00:07:27,000
‫middleware yang akan dijalankan setiap kali ada kueri.

138
00:07:27,000 --> 00:07:30,540
‫Benar, mari kita gabungkan semua pra middleware ini

139
00:07:32,180 --> 00:07:34,943
‫dan kemudian setelah itu memiliki pos.

140
00:07:37,230 --> 00:07:42,230
‫Baiklah, jadi izinkan saya menyalin kode yang kita miliki sebelumnya dan sekarang

141
00:07:42,660 --> 00:07:45,410
‫mari kita tambahkan saja ke ini, karena

142
00:07:45,410 --> 00:07:47,620
‫ingat bahwa di middleware

143
00:07:47,620 --> 00:07:50,810
‫kueri, ini selalu menunjuk ke kueri saat ini.

144
00:07:50,810 --> 00:07:53,760
‫Jadi sekarang pada dasarnya semua kueri

145
00:07:53,760 --> 00:07:56,560
‫akan secara otomatis mengisi bidang panduan

146
00:07:56,560 --> 00:07:58,740
‫dengan pengguna yang direferensikan.

147
00:07:58,740 --> 00:08:02,053
‫Oke, jadi sekarang kita bisa menyingkirkannya di sini.

148
00:08:05,040 --> 00:08:07,770
‫Dan ya, itu sebenarnya.

149
00:08:07,770 --> 00:08:09,720
‫Jadi sekarang kita melakukannya di

150
00:08:09,720 --> 00:08:12,040
‫sini, daripada melakukannya di dua tempat, di controller.

151
00:08:12,040 --> 00:08:15,200
‫Jadi ini adalah trik kecil yang bagus jika Anda

152
00:08:15,200 --> 00:08:17,713
‫selalu ingin mengisi semua dokumen Anda.

153
00:08:19,130 --> 00:08:20,923
‫Jadi, mari kita uji.

154
00:08:21,940 --> 00:08:23,993
‫Pertama, jika masih berfungsi di sini.

155
00:08:24,840 --> 00:08:27,553
‫Dan memang benar, jadi kami mendapatkan dua pengguna kami.

156
00:08:28,530 --> 00:08:32,120
‫Dan kemudian mari kita uji di sini yang

157
00:08:32,120 --> 00:08:36,060
‫sebelumnya tidak berfungsi dan sekarang berhasil, jadi inilah hasilnya.

158
00:08:36,060 --> 00:08:38,790
‫Dan sekarang hanya untuk memastikan bahwa itu

159
00:08:38,790 --> 00:08:43,384
‫benar-benar berfungsi, mari kita juga memperbaruinya dan pada dasarnya menambahkan pemandu wisata lain.

160
00:08:43,384 --> 00:08:48,320
‫Jadi mari kita salin id tur di sini lalu perbarui tur jadi

161
00:08:49,300 --> 00:08:51,160
‫kita perlu meletakkan id

162
00:08:51,160 --> 00:08:55,563
‫di sini, lalu di badan mari kita ambil dari create tour,

163
00:08:58,140 --> 00:08:59,433
‫jadi panduan

164
00:09:02,040 --> 00:09:04,360
‫ini, dan taruh di sini, dan

165
00:09:04,360 --> 00:09:07,410
‫kemudian kita juga perlu mendapatkan pengguna lain.

166
00:09:07,410 --> 00:09:10,960
‫Jadi, ini dia di sini, yang sebenarnya bukan panduan

167
00:09:10,960 --> 00:09:14,710
‫atau bahkan bukan admin, tetapi ini masih hanya untuk pengujian,

168
00:09:14,710 --> 00:09:16,933
‫jadi mari kita ambil id

169
00:09:19,450 --> 00:09:22,423
‫ini, lalu lanjutkan dan taruh di sini.

170
00:09:24,090 --> 00:09:28,640
‫Jadi, mari kita perbarui, yang masih berfungsi, dan sekarang sebenarnya,

171
00:09:28,640 --> 00:09:31,070
‫bahkan dalam output ini,

172
00:09:31,070 --> 00:09:34,130
‫kita sudah memiliki data yang terisi.

173
00:09:34,130 --> 00:09:36,410
‫Oke, karena dalam ekspresi reguler kami,

174
00:09:36,410 --> 00:09:38,300
‫ingat, kami menggunakan find.

175
00:09:38,300 --> 00:09:42,450
‫Jadi, pembaruan di sini diimplementasikan menggunakan find by id

176
00:09:42,450 --> 00:09:45,465
‫dan pembaruan, dan juga dimulai dengan find

177
00:09:45,465 --> 00:09:49,110
‫dan oleh karena itu middleware kueri yang sebelumnya

178
00:09:49,110 --> 00:09:51,690
‫juga berlaku untuk fungsi ini.

179
00:09:51,690 --> 00:09:55,440
‫Oke dan begitu, ini adalah cara kerja mengisi.

180
00:09:55,440 --> 00:09:58,640
‫Oke, sekali lagi, alat yang sangat penting di

181
00:09:58,640 --> 00:10:01,200
‫kotak peralatan Mongoose Anda, oke.

182
00:10:01,200 --> 00:10:02,910
‫Dan hanya untuk memastikan,

183
00:10:02,910 --> 00:10:05,770
‫mari kita ambil 15 detik di sini untuk rekap.

184
00:10:05,770 --> 00:10:08,700
‫Jadi ini adalah proses dua langkah.

185
00:10:08,700 --> 00:10:12,080
‫Pertama, Anda membuat referensi ke model lain.

186
00:10:12,080 --> 00:10:14,680
‫Jadi, dengan ini, Anda secara efektif

187
00:10:14,680 --> 00:10:17,410
‫membuat hubungan antara dua kumpulan data ini.

188
00:10:17,410 --> 00:10:20,349
‫Kemudian, pada langkah kedua, Anda mengisi

189
00:10:20,349 --> 00:10:23,010
‫bidang yang baru saja

190
00:10:23,010 --> 00:10:26,920
‫Anda tentukan sebelumnya, jadi panduan menggunakan metode mengisi.

191
00:10:26,920 --> 00:10:30,350
‫Baiklah, sangat sederhana, sangat lugas, yang Anda butuhkan hanyalah

192
00:10:30,350 --> 00:10:32,330
‫benar-benar memahami logika di

193
00:10:32,330 --> 00:10:34,620
‫balik semua ini dan kemudian

194
00:10:34,620 --> 00:10:37,163
‫Anda siap untuk benar-benar mulai menggunakannya.

