All language subtitles for 007 Populating Tour Guides_Downloadly.ir_en

af Afrikaans
ak Akan
sq Albanian
am Amharic
ar Arabic
hy Armenian
az Azerbaijani
eu Basque
be Belarusian
bem Bemba
bn Bengali
bh Bihari
bs Bosnian
br Breton
bg Bulgarian
km Cambodian
ca Catalan
ceb Cebuano
chr Cherokee
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
ee Ewe
fo Faroese
tl Filipino
fi Finnish
fr French
fy Frisian
gaa Ga
gl Galician
ka Georgian
de German
el Greek
gn Guarani
gu Gujarati
ht Haitian Creole
ha Hausa
haw Hawaiian
iw Hebrew
hi Hindi
hmn Hmong
hu Hungarian
is Icelandic
ig Igbo
id Indonesian
ia Interlingua
ga Irish
it Italian
ja Japanese
jw Javanese
kn Kannada
kk Kazakh
rw Kinyarwanda
rn Kirundi
kg Kongo
ko Korean
kri Krio (Sierra Leone)
ku Kurdish
ckb Kurdish (Soranî)
ky Kyrgyz
lo Laothian
la Latin
lv Latvian
ln Lingala
lt Lithuanian
loz Lozi
lg Luganda
ach Luo
lb Luxembourgish
mk Macedonian
mg Malagasy
ms Malay
ml Malayalam
mt Maltese
mi Maori
mr Marathi
mfe Mauritian Creole
mo Moldavian
mn Mongolian
my Myanmar (Burmese)
sr-ME Montenegrin
ne Nepali
pcm Nigerian Pidgin
nso Northern Sotho
no Norwegian
nn Norwegian (Nynorsk)
oc Occitan
or Oriya
om Oromo
ps Pashto
fa Persian Download
pl Polish
pt-BR Portuguese (Brazil)
pt Portuguese (Portugal)
pa Punjabi
qu Quechua
ro Romanian
rm Romansh
nyn Runyakitara
ru Russian
sm Samoan
gd Scots Gaelic
sr Serbian
sh Serbo-Croatian
st Sesotho
tn Setswana
crs Seychellois Creole
sn Shona
sd Sindhi
si Sinhalese
sk Slovak
sl Slovenian
so Somali
es Spanish
es-419 Spanish (Latin American)
su Sundanese
sw Swahili
sv Swedish
tg Tajik
ta Tamil
tt Tatar
te Telugu
th Thai
ti Tigrinya
to Tonga
lua Tshiluba
tum Tumbuka
tr Turkish
tk Turkmen
tw Twi
ug Uighur
uk Ukrainian
ur Urdu
uz Uzbek
vi Vietnamese
cy Welsh
wo Wolof
xh Xhosa
yi Yiddish
yo Yoruba
zu Zulu
Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated: 1 00:00:01,100 --> 00:00:03,780 Let's now use a process called populate 2 00:00:03,780 --> 00:00:06,610 in order to actually get access to the referenced 3 00:00:06,610 --> 00:00:10,173 tour guides whenever we query for a certain tour. 4 00:00:11,820 --> 00:00:14,290 So, in the last video, we created a reference 5 00:00:14,290 --> 00:00:17,660 to the user, here in this guides field, 6 00:00:17,660 --> 00:00:20,180 right in our tour model, right? 7 00:00:20,180 --> 00:00:22,840 And now we're gonna use populate in order to 8 00:00:22,840 --> 00:00:25,610 basically replace the fields that we referenced 9 00:00:25,610 --> 00:00:28,210 with the actual related data. 10 00:00:28,210 --> 00:00:30,330 And the result of that will look as 11 00:00:30,330 --> 00:00:32,920 if the data has always been embedded, 12 00:00:32,920 --> 00:00:35,100 when in fact, as we know, it is in 13 00:00:35,100 --> 00:00:38,280 a completely different collection okay? 14 00:00:38,280 --> 00:00:41,940 Now, the populate process always happens in a query. 15 00:00:41,940 --> 00:00:44,713 And so let's now go to our tour controller, 16 00:00:46,000 --> 00:00:50,340 and then right to the function where we get a single tour. 17 00:00:50,340 --> 00:00:52,460 So here, in get tour. 18 00:00:52,460 --> 00:00:55,440 And here's our query, right? 19 00:00:55,440 --> 00:00:57,831 So this here, is where we build our query. 20 00:00:57,831 --> 00:01:00,450 And now all we need to do is to add 21 00:01:00,450 --> 00:01:02,183 the populate to the query. 22 00:01:04,370 --> 00:01:07,440 So populate, and then the name of the field 23 00:01:07,440 --> 00:01:09,250 which we actually want to populate 24 00:01:10,490 --> 00:01:12,533 and that is called guides, okay? 25 00:01:13,950 --> 00:01:17,850 And if you think about it, this name actually makes sense. 26 00:01:17,850 --> 00:01:21,080 So we want to populate so basically to fill up 27 00:01:21,080 --> 00:01:24,940 the field called guides in our model. 28 00:01:24,940 --> 00:01:27,870 Right, so again, this guides field 29 00:01:27,870 --> 00:01:29,860 only contains the reference. 30 00:01:29,860 --> 00:01:32,620 and with populate we're then gonna fill it up 31 00:01:32,620 --> 00:01:36,750 with the actual data, all right and again only in the query 32 00:01:36,750 --> 00:01:39,890 and not in the actual database, okay? 33 00:01:39,890 --> 00:01:41,840 So, this is really all we need to do. 34 00:01:41,840 --> 00:01:46,760 And let's now take a look at the result, okay? 35 00:01:46,760 --> 00:01:51,760 So, this is the id of the tour and let's remember 36 00:01:51,840 --> 00:01:55,370 that this is how the guides look right, right now, okay? 37 00:01:55,370 --> 00:01:59,323 But if we now, get tour and with that id, 38 00:02:01,170 --> 00:02:03,260 then let's now wait for it, 39 00:02:03,260 --> 00:02:07,220 and indeed, here is the data about the guides. 40 00:02:07,220 --> 00:02:10,720 Okay, so these two elements that we had in the guides 41 00:02:10,720 --> 00:02:14,600 already, have now been populated with the actual data. 42 00:02:14,600 --> 00:02:17,373 And if we now take a look at get all tours, 43 00:02:18,550 --> 00:02:21,933 let's actually get rid of some of this stuff here. 44 00:02:22,842 --> 00:02:25,073 We have too much stuff open here. 45 00:02:26,010 --> 00:02:28,423 So if we now get all the tours, 46 00:02:29,730 --> 00:02:31,820 okay, then let's scroll to the end 47 00:02:31,820 --> 00:02:33,280 where the new one should be 48 00:02:36,030 --> 00:02:38,590 and apparently it's now well, 49 00:02:38,590 --> 00:02:40,690 oh that's because I have this filter here, 50 00:02:41,840 --> 00:02:46,610 let's get rid of that, and now I have my 10 results 51 00:02:46,610 --> 00:02:49,270 and actually it's right here, so the new test tour. 52 00:02:49,270 --> 00:02:52,290 And now you see that in here it's back to showing us 53 00:02:52,290 --> 00:02:55,860 only the values that are actually in the database. 54 00:02:55,860 --> 00:02:58,010 So let's also confirm that here in Compass. 55 00:03:01,940 --> 00:03:05,200 And so indeed, as you see, we still do not have the actual 56 00:03:05,200 --> 00:03:09,750 data in here in the database, but only really the ids. 57 00:03:09,750 --> 00:03:13,290 Okay, and it's only that populate step which will then 58 00:03:13,290 --> 00:03:16,540 replace these ids with the actual data, okay? 59 00:03:16,540 --> 00:03:18,740 And so right here, that doesn't happen 60 00:03:18,740 --> 00:03:21,260 well because, we didn't implement the populate 61 00:03:21,260 --> 00:03:24,200 in the get all tours route handler. 62 00:03:24,200 --> 00:03:27,950 Okay, now let me just show you a small trick 63 00:03:27,950 --> 00:03:30,490 that we can do with the populate function. 64 00:03:30,490 --> 00:03:33,590 Which is to actually also just select the certain fields. 65 00:03:33,590 --> 00:03:38,370 So for example, we're not interested in this v property here 66 00:03:38,370 --> 00:03:41,350 and also not in passwordChangedAt right, 67 00:03:41,350 --> 00:03:42,683 so that's not the kind of data 68 00:03:42,683 --> 00:03:45,660 that we want about our tour guides. 69 00:03:45,660 --> 00:03:49,197 And so here in populate, we can actually specify that. 70 00:03:49,197 --> 00:03:52,230 So instead of just passing in the string, 71 00:03:52,230 --> 00:03:55,280 we can create an object of options 72 00:03:56,620 --> 00:03:57,793 and then we can say, 73 00:03:59,440 --> 00:04:02,850 the path is guides, so basically, the name of the field 74 00:04:02,850 --> 00:04:07,850 we want to replace, and then, as usual, we can use select, 75 00:04:09,800 --> 00:04:11,553 and then minus, 76 00:04:12,710 --> 00:04:16,970 this one here and also, the other one, 77 00:04:16,970 --> 00:04:21,790 so passwordChangedAt, it's just easier to copy, 78 00:04:21,790 --> 00:04:25,370 all right, so let's change it here, 79 00:04:25,370 --> 00:04:27,603 and send this again. 80 00:04:28,600 --> 00:04:31,800 And this is of course, not the right route, 81 00:04:31,800 --> 00:04:35,910 so sorry for that, I think I also used it before actually 82 00:04:35,910 --> 00:04:38,143 where really I wanted to show you this one, 83 00:04:39,040 --> 00:04:42,970 right, and so sorry for that, but still 84 00:04:42,970 --> 00:04:45,920 what we want to get rid of here is this V 85 00:04:45,920 --> 00:04:47,510 and this passwordChangedAt. 86 00:04:47,510 --> 00:04:49,230 And so we already did that, 87 00:04:49,230 --> 00:04:51,737 so if we send it now, then of course 88 00:04:51,737 --> 00:04:55,810 we only get the data that we're interested in. 89 00:04:55,810 --> 00:04:58,540 All right, so this populate function 90 00:04:58,540 --> 00:05:01,110 is an absolutely fundamental tool 91 00:05:01,110 --> 00:05:03,160 for working with data in Mongoose. 92 00:05:03,160 --> 00:05:04,790 And especially of course when there 93 00:05:04,790 --> 00:05:06,760 are relationships between data, 94 00:05:06,760 --> 00:05:09,860 okay, so you should always know exactly how and when 95 00:05:09,860 --> 00:05:12,220 to use it for your own applications. 96 00:05:12,220 --> 00:05:15,040 And in order to train for that, we will of course use it 97 00:05:15,040 --> 00:05:18,200 many times more throughout this section. 98 00:05:18,200 --> 00:05:21,140 Now just one thing that I want you to keep in mind, 99 00:05:21,140 --> 00:05:24,280 is that behind the scenes, using populate will still 100 00:05:24,280 --> 00:05:26,300 actually create a new query, 101 00:05:26,300 --> 00:05:29,290 and so this might affect your performance. 102 00:05:29,290 --> 00:05:31,985 Okay, of course if you only do it once or twice 103 00:05:31,985 --> 00:05:35,430 and in a kind of small application, then that small 104 00:05:35,430 --> 00:05:38,170 hit on performance is no big deal at all. 105 00:05:38,170 --> 00:05:40,944 But in a huge application, with tons of populates 106 00:05:40,944 --> 00:05:43,469 all over the place, then that might indeed 107 00:05:43,469 --> 00:05:46,450 have some kind of effect, okay? 108 00:05:46,450 --> 00:05:47,960 So just keep that in mind. 109 00:05:47,960 --> 00:05:51,430 Okay, and really it makes sense, right 110 00:05:51,430 --> 00:05:54,700 because how else would Mongoose be able to get data 111 00:05:54,700 --> 00:05:57,700 about tours and users at the same time. 112 00:05:57,700 --> 00:06:01,050 It needs to create a new query basically in order to 113 00:06:01,050 --> 00:06:03,960 be able to create this connection. 114 00:06:03,960 --> 00:06:06,060 Okay and now just to finish this, 115 00:06:06,060 --> 00:06:07,763 let's remember what I showed you that 116 00:06:07,763 --> 00:06:11,610 this actually didn't work when we get all the tours. 117 00:06:11,610 --> 00:06:15,460 So, remember how in this situation, 118 00:06:15,460 --> 00:06:18,620 we still simply get the ids of the tour guides 119 00:06:18,620 --> 00:06:20,850 and not the referenced user data. 120 00:06:20,850 --> 00:06:24,050 Okay, and so one solution would basically 121 00:06:24,050 --> 00:06:27,956 be to copy this code here, so this populate function, 122 00:06:27,956 --> 00:06:30,950 also here into this route handler, 123 00:06:30,950 --> 00:06:34,390 but of course, duplicate code is never a good idea. 124 00:06:34,390 --> 00:06:35,635 And I hope that you already know 125 00:06:35,635 --> 00:06:39,640 at this point of a better way of doing this. 126 00:06:39,640 --> 00:06:42,310 And the answer to that is query middleware. 127 00:06:42,310 --> 00:06:46,833 Okay, so let's quickly go ahead and move to our model, 128 00:06:47,910 --> 00:06:49,620 and I'm copying this code here now 129 00:06:51,731 --> 00:06:55,253 and so, yeah let's do that right here. 130 00:06:57,580 --> 00:06:58,413 So, 131 00:06:59,430 --> 00:07:03,460 a pre and then I will actually just as before 132 00:07:03,460 --> 00:07:06,640 do it with a regular expression, which is then gonna work 133 00:07:06,640 --> 00:07:09,363 for everything that starts with find. 134 00:07:11,830 --> 00:07:13,083 So, just like this, 135 00:07:17,010 --> 00:07:21,500 Okay, and of course, we do this in query middleware, 136 00:07:21,500 --> 00:07:23,820 well because, this is the kind of middleware 137 00:07:23,820 --> 00:07:27,000 that is going to run each time there is a query. 138 00:07:27,000 --> 00:07:30,540 Right, let's just put all of these pre middlewares together 139 00:07:32,180 --> 00:07:34,943 and then after that have the post one. 140 00:07:37,230 --> 00:07:42,230 All right, so let me copy the code that we had before 141 00:07:42,660 --> 00:07:45,410 and now let's just add it to this, 142 00:07:45,410 --> 00:07:47,620 because remember that in query middleware, 143 00:07:47,620 --> 00:07:50,810 this always points to the current query. 144 00:07:50,810 --> 00:07:53,760 And so now basically all of the queries will then 145 00:07:53,760 --> 00:07:56,560 automatically populate the guides field 146 00:07:56,560 --> 00:07:58,740 with the referenced user. 147 00:07:58,740 --> 00:08:02,053 Okay, and so we can now get rid of it here. 148 00:08:05,040 --> 00:08:07,770 And yeah, that's actually it. 149 00:08:07,770 --> 00:08:09,720 So now we do it here, instead of doing it 150 00:08:09,720 --> 00:08:12,040 in two places, in the controller. 151 00:08:12,040 --> 00:08:15,200 And so this is a nice little trick in case that you always 152 00:08:15,200 --> 00:08:17,713 want to populate all your documents. 153 00:08:19,130 --> 00:08:20,923 So, let's test it out. 154 00:08:21,940 --> 00:08:23,993 First, if it still works here. 155 00:08:24,840 --> 00:08:27,553 And indeed it does, so we get our two users. 156 00:08:28,530 --> 00:08:32,120 And then let's test it here where it didn't work before 157 00:08:32,120 --> 00:08:36,059 and now it does, so here's the result of that. 158 00:08:36,059 --> 00:08:38,789 And now just to make sure that it does actually work, 159 00:08:38,789 --> 00:08:43,384 let's also update it and basically add another tour guide. 160 00:08:43,384 --> 00:08:48,320 So let's copy the id of the tour here then update tour 161 00:08:49,300 --> 00:08:51,160 so we need to put the id here, 162 00:08:51,160 --> 00:08:55,563 and then in the body let's get it from create tour, 163 00:08:58,140 --> 00:08:59,433 so this guides, 164 00:09:02,040 --> 00:09:04,360 and put that here, and then we also 165 00:09:04,360 --> 00:09:07,410 need to get our other user. 166 00:09:07,410 --> 00:09:10,960 So, it's this one here, which is actually not a guide 167 00:09:10,960 --> 00:09:14,710 or not even an admin, but still this is just for testing, 168 00:09:14,710 --> 00:09:16,933 and so let's grab this id, 169 00:09:19,450 --> 00:09:22,423 and then go ahead and put it here. 170 00:09:24,090 --> 00:09:28,640 So, let's update it, that still works, 171 00:09:28,640 --> 00:09:31,070 and so now actually, even in this output, 172 00:09:31,070 --> 00:09:34,130 we already have the populated data. 173 00:09:34,130 --> 00:09:36,410 Okay, because in our regular expression 174 00:09:36,410 --> 00:09:38,300 remember we used find. 175 00:09:38,300 --> 00:09:42,450 And so, this updating here is implemented using find 176 00:09:42,450 --> 00:09:45,465 by id and update, and so it also starts with find 177 00:09:45,465 --> 00:09:49,110 and so therefore the query middleware that we were before 178 00:09:49,110 --> 00:09:51,690 also applies to this function. 179 00:09:51,690 --> 00:09:55,440 Okay and so, this is how populating works. 180 00:09:55,440 --> 00:09:58,640 Okay, so again, extremely important tool 181 00:09:58,640 --> 00:10:01,200 in your Mongoose toolbox, all right. 182 00:10:01,200 --> 00:10:02,910 And just to make sure, let's take 183 00:10:02,910 --> 00:10:05,770 15 seconds here to recap. 184 00:10:05,770 --> 00:10:08,700 So this is a two step process. 185 00:10:08,700 --> 00:10:12,080 First, you create a reference to another model. 186 00:10:12,080 --> 00:10:14,680 And so, with this, you effectively create 187 00:10:14,680 --> 00:10:17,410 the relationship between these two datasets. 188 00:10:17,410 --> 00:10:20,349 Then, in the second step, you populate that field 189 00:10:20,349 --> 00:10:23,010 that you just specified before, 190 00:10:23,010 --> 00:10:26,920 so guides using the populate method. 191 00:10:26,920 --> 00:10:30,350 All right, so very simple, very straightforward, 192 00:10:30,350 --> 00:10:32,330 all you need is to really understand 193 00:10:32,330 --> 00:10:34,620 the logic behind all of this and then 194 00:10:34,620 --> 00:10:37,163 you're ready to actually start using it. 15565

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