All language subtitles for 005 Modelling Tour Guides_ Embedding_Downloadly.ir_en

af Afrikaans
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bn Bengali
bs Bosnian
bg Bulgarian
ca Catalan
ceb Cebuano
ny Chichewa
zh-CN Chinese (Simplified)
zh-TW Chinese (Traditional)
co Corsican
hr Croatian
cs Czech
da Danish
nl Dutch
en English
eo Esperanto
et Estonian
tl Filipino
fi Finnish
fr French
fy Frisian
gl Galician
ka Georgian
de German
el Greek
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
km Khmer
ko Korean
ku Kurdish (Kurmanji)
ky Kyrgyz
lo Lao
la Latin
lv Latvian
lt Lithuanian
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mn Mongolian
my Myanmar (Burmese)
ne Nepali
no Norwegian
ps Pashto
fa Persian Download
pl Polish
pt Portuguese
pa Punjabi
ro Romanian
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
st Sesotho
sn Shona
sd Sindhi
si Sinhala
sk Slovak
sl Slovenian
so Somali
es Spanish
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
te Telugu
th Thai
tr Turkish
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
or Odia (Oriya)
rw Kinyarwanda
tk Turkmen
tt Tatar
ug Uyghur
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,110 --> 00:00:02,900 So remember how in the video 2 00:00:02,900 --> 00:00:05,510 about our data model, we said that 3 00:00:05,510 --> 00:00:07,880 we could either embed or reference 4 00:00:07,880 --> 00:00:10,204 the tour guide data, so in this video 5 00:00:10,204 --> 00:00:13,340 I'm gonna show you how we could implement embedding 6 00:00:13,340 --> 00:00:16,393 tour guide documents into a tour document. 7 00:00:17,930 --> 00:00:20,320 So again, in this lecture we are going to 8 00:00:20,320 --> 00:00:23,700 embed user documents into tour documents, 9 00:00:23,700 --> 00:00:25,840 and then in the next video, I will show you 10 00:00:25,840 --> 00:00:28,030 how we can actually reference users 11 00:00:28,030 --> 00:00:30,610 instead of embedding, all right? 12 00:00:30,610 --> 00:00:33,020 So the idea here is that when creating 13 00:00:33,020 --> 00:00:35,730 a new tour document, the user will simply 14 00:00:35,730 --> 00:00:38,630 add an array of user IDs, and we will then 15 00:00:38,630 --> 00:00:41,020 get the corresponding user documents 16 00:00:41,020 --> 00:00:42,827 based on these IDs, and add them 17 00:00:42,827 --> 00:00:44,800 to our tour documents. 18 00:00:44,800 --> 00:00:48,813 So in other words, we embed them into our tour, okay? 19 00:00:50,903 --> 00:00:52,323 So, let's do that here now. 20 00:00:55,430 --> 00:00:59,220 So guides will be of the type array, okay? 21 00:00:59,220 --> 00:01:01,700 Very simple, and actually before we implement 22 00:01:01,700 --> 00:01:04,080 any code, let me show you as an example 23 00:01:04,080 --> 00:01:06,943 how this would work when creating a new tour. 24 00:01:08,680 --> 00:01:11,360 So, let's go back to Postman here, 25 00:01:11,360 --> 00:01:14,523 and create new tour, 26 00:01:16,270 --> 00:01:18,330 okay, and so here in our body 27 00:01:18,330 --> 00:01:23,113 we of course would now add the guides, 28 00:01:24,410 --> 00:01:29,400 quotes, and then specify an array of IDs, okay? 29 00:01:29,400 --> 00:01:31,113 So, let's get some user IDs. 30 00:01:32,610 --> 00:01:36,070 So, get all users, let's see what we have here. 31 00:01:36,070 --> 00:01:38,070 So we have a guide here, actually, 32 00:01:38,070 --> 00:01:39,620 and so let's get this ID 33 00:01:40,460 --> 00:01:42,060 along with the quotes, actually, 34 00:01:46,370 --> 00:01:47,893 and so let's put that here, 35 00:01:49,410 --> 00:01:51,163 and let's add some other ones. 36 00:01:52,900 --> 00:01:57,100 So, this here as well and actually just these two. 37 00:01:57,100 --> 00:02:02,100 That should be enough for testing this stuff, okay, 38 00:02:02,410 --> 00:02:04,100 and so this is then how we're gonna create 39 00:02:04,100 --> 00:02:07,490 a new tour with two guides, okay, 40 00:02:07,490 --> 00:02:10,440 and again once we then save this tour, 41 00:02:10,440 --> 00:02:11,840 we will then, behind the scenes, 42 00:02:11,840 --> 00:02:13,472 retrieve the two user documents 43 00:02:13,472 --> 00:02:17,270 corresponding to these two IDs, all right? 44 00:02:17,270 --> 00:02:19,263 So, let's implement that, 45 00:02:20,440 --> 00:02:21,930 and back in our model 46 00:02:21,930 --> 00:02:23,960 the best place of doing that 47 00:02:23,960 --> 00:02:26,283 is a pre-saved middleware, right? 48 00:02:27,280 --> 00:02:29,980 So, that will then happen automatically 49 00:02:29,980 --> 00:02:31,550 behind the scenes, basically, 50 00:02:31,550 --> 00:02:34,730 each time that a new tour is saved, 51 00:02:34,730 --> 00:02:36,780 and actually, I don't want to do it here. 52 00:02:37,620 --> 00:02:39,250 So we have query, here, 53 00:02:39,250 --> 00:02:40,920 here's the document "Middleware," 54 00:02:40,920 --> 00:02:42,203 so let's do that here. 55 00:02:43,320 --> 00:02:45,103 So tourSchema.pre, 56 00:02:53,580 --> 00:02:57,370 All right, let's call next right away here, 57 00:02:57,370 --> 00:02:59,600 so that we don't forget it in the end. 58 00:02:59,600 --> 00:03:04,600 Okay, so we get this.guides as an input, 59 00:03:05,220 --> 00:03:07,360 and remember this is gonna be an array 60 00:03:07,360 --> 00:03:10,330 of all the user IDs, right, and so we 61 00:03:10,330 --> 00:03:13,290 will loop through them using a .map, 62 00:03:13,290 --> 00:03:15,480 and then in each iteration get the 63 00:03:15,480 --> 00:03:18,373 user document for the current ID, all right, 64 00:03:19,477 --> 00:03:24,477 and we're gonna store that inside of guides, all right? 65 00:03:26,460 --> 00:03:29,284 So, the current element, which is gonna be the ID, 66 00:03:29,284 --> 00:03:30,840 well let's actually call it ID 67 00:03:30,840 --> 00:03:32,960 to make it a bit easier understand, 68 00:03:32,960 --> 00:03:36,360 and so now we actually need the user, right, 69 00:03:36,360 --> 00:03:38,803 so let's go ahead and import that. 70 00:03:41,630 --> 00:03:43,143 So, const User, 71 00:03:45,490 --> 00:03:46,563 require, 72 00:03:48,000 --> 00:03:53,000 and it's actually in the same folder here, all right, 73 00:03:55,759 --> 00:03:57,300 so User.findByID 74 00:04:01,350 --> 00:04:03,730 with the current ID, all right? 75 00:04:03,730 --> 00:04:05,550 But now, keep in mind that we actually 76 00:04:05,550 --> 00:04:09,977 do need to await this promise here, right 77 00:04:09,977 --> 00:04:11,870 and so, therefore, the function needs 78 00:04:11,870 --> 00:04:13,513 to be marked as async, 79 00:04:15,540 --> 00:04:18,313 but now we actually get a problem, all right, 80 00:04:18,313 --> 00:04:21,339 because the .map method will assign 81 00:04:21,339 --> 00:04:24,550 the result of each iteration to the new element 82 00:04:24,550 --> 00:04:27,150 in the guides array, okay, and so now 83 00:04:27,150 --> 00:04:29,100 we have an asynchronous function here 84 00:04:29,100 --> 00:04:31,760 and, as you know, that returns a promise, 85 00:04:31,760 --> 00:04:34,160 and so right now this guides array here 86 00:04:34,160 --> 00:04:38,120 is basically an array full of promises, okay. 87 00:04:38,120 --> 00:04:40,530 Let's actually call this guidesPromises 88 00:04:42,200 --> 00:04:44,160 and so we now actually need to run 89 00:04:44,160 --> 00:04:47,240 all of these promises, basically at the same time. 90 00:04:47,240 --> 00:04:49,520 As I showed you a bit earlier in this code, 91 00:04:49,520 --> 00:04:51,490 at least if you didn't skip the 92 00:04:51,490 --> 00:04:53,860 asynchronous JavaScript section, 93 00:04:53,860 --> 00:04:58,860 all we need to do is await Promise.all 94 00:05:01,230 --> 00:05:03,450 and then guidesPromise, 95 00:05:04,820 --> 00:05:07,670 okay, and we can directly assign the result 96 00:05:07,670 --> 00:05:11,390 of this to this.guides, 97 00:05:11,390 --> 00:05:14,130 and so basically override that temple array 98 00:05:14,130 --> 00:05:18,420 of IDs with an array of user documents, okay, 99 00:05:18,420 --> 00:05:20,000 and since we're now using await here, 100 00:05:20,000 --> 00:05:23,860 we need to mark this function as async, okay? 101 00:05:23,860 --> 00:05:27,900 Give it a save, and I think that's actually it, okay? 102 00:05:27,900 --> 00:05:31,460 So again, we need to use Promise.all here because 103 00:05:31,460 --> 00:05:35,298 the result of all of this here is a promise, okay, 104 00:05:35,298 --> 00:05:38,410 and so this array here is gonna be an array 105 00:05:38,410 --> 00:05:40,483 full of promises which we then run 106 00:05:40,483 --> 00:05:44,180 by awaiting Promise.all, okay? 107 00:05:44,180 --> 00:05:46,450 So, let's actually test this out now, 108 00:05:46,450 --> 00:05:50,018 and we already have all of this code here ready, 109 00:05:50,018 --> 00:05:52,373 we should just change this name here. 110 00:05:55,150 --> 00:05:58,560 So, 'Test Tour,' but the IDs are already here. 111 00:05:58,560 --> 00:06:01,760 So let's send this, and our tour name 112 00:06:01,760 --> 00:06:05,167 needs to be longer, 'New Task Tour.' 113 00:06:06,050 --> 00:06:11,050 Okay, but now let's take a look at our results, 114 00:06:11,240 --> 00:06:15,900 and so indeed we get our guides here, okay? 115 00:06:15,900 --> 00:06:18,580 So these are the complete documents, 116 00:06:18,580 --> 00:06:22,170 and indeed not just the IDs, right? 117 00:06:22,170 --> 00:06:24,198 Great, and so this is how we could 118 00:06:24,198 --> 00:06:28,440 implement embedding for this tour guides example. 119 00:06:28,440 --> 00:06:30,840 Now, this simple code that we implemented here 120 00:06:30,840 --> 00:06:33,850 of course only works for creating new documents, 121 00:06:33,850 --> 00:06:35,820 not for updating them, right? 122 00:06:35,820 --> 00:06:38,020 So now, we would have to do go ahead 123 00:06:38,020 --> 00:06:42,350 and implement this same logic also for updates. 124 00:06:42,350 --> 00:06:44,540 However, I'm not going to do that because, 125 00:06:44,540 --> 00:06:47,530 remember from the video where we modeled our data, 126 00:06:47,530 --> 00:06:49,450 that there are actually some drawbacks 127 00:06:49,450 --> 00:06:52,090 of embedding this data in this case. 128 00:06:52,090 --> 00:06:54,350 For example, imagine that a tour guide 129 00:06:54,350 --> 00:06:56,770 updates his email address, or they change 130 00:06:56,770 --> 00:06:59,250 their role from guide to lead guide. 131 00:06:59,250 --> 00:07:02,020 Each time one of these changes would happen, 132 00:07:02,020 --> 00:07:04,130 then you'd have to check if a tour 133 00:07:04,130 --> 00:07:06,610 has that user as a guide, and if so, 134 00:07:06,610 --> 00:07:08,670 then update the tour as well, 135 00:07:08,670 --> 00:07:10,650 and so that's really a lot of work 136 00:07:10,650 --> 00:07:11,640 and we're not gonna go 137 00:07:11,640 --> 00:07:13,085 in that direction, all right? 138 00:07:13,085 --> 00:07:15,530 Now, I still wanted to show you 139 00:07:15,530 --> 00:07:17,220 how embedding really works, and how 140 00:07:17,220 --> 00:07:19,520 we could implement it in this situation 141 00:07:19,520 --> 00:07:22,201 because I really believe it's very important 142 00:07:22,201 --> 00:07:24,551 that you still know how to do everything 143 00:07:24,551 --> 00:07:26,340 in case you ever need it 144 00:07:26,340 --> 00:07:28,590 in your own applications, okay, 145 00:07:28,590 --> 00:07:30,820 but in this particular situation we will, 146 00:07:30,820 --> 00:07:33,810 instead of embedding, use referencing, 147 00:07:33,810 --> 00:07:36,085 and I talked about reasons for doing so 148 00:07:36,085 --> 00:07:38,400 back in that video, okay? 149 00:07:38,400 --> 00:07:40,930 So, let's actually go ahead and do that 150 00:07:40,930 --> 00:07:42,803 right in the next lecture. 11410

Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.