All language subtitles for 004 Modelling Locations (Geospatial Data)_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,130 --> 00:00:02,400 Welcome back. 2 00:00:02,400 --> 00:00:05,260 So after some heavier theory lectures, 3 00:00:05,260 --> 00:00:09,210 now, we're finally gonna start implementing our data model 4 00:00:09,210 --> 00:00:11,640 and starting with the locations. 5 00:00:11,640 --> 00:00:14,080 So in this video, you're gonna learn all about 6 00:00:14,080 --> 00:00:16,680 geospatial data in MongoDB. 7 00:00:16,680 --> 00:00:18,120 And this is really a topic 8 00:00:18,120 --> 00:00:20,513 that I personally find really exciting. 9 00:00:22,170 --> 00:00:24,630 Now, remember from the previous lecture 10 00:00:24,630 --> 00:00:27,470 that our location data will actually be embedded 11 00:00:27,470 --> 00:00:29,070 into the tours. 12 00:00:29,070 --> 00:00:31,680 And so therefore, we're basically gonna declare 13 00:00:31,680 --> 00:00:34,040 everything that is related to locations 14 00:00:34,040 --> 00:00:35,500 in our tour model. 15 00:00:35,500 --> 00:00:40,320 All right, so let's open that one up and right at the end, 16 00:00:40,320 --> 00:00:43,010 let's start by adding the startLocation. 17 00:00:43,010 --> 00:00:45,660 Okay, so we will have startLocation 18 00:00:45,660 --> 00:00:48,520 and then also, locations in general. 19 00:00:48,520 --> 00:00:52,680 Now, MongoDB supports geospatial data out of the box. 20 00:00:52,680 --> 00:00:56,650 And geospatial data is basically data that describes 21 00:00:56,650 --> 00:01:00,870 places on earth using longitude and latitude coordinates. 22 00:01:00,870 --> 00:01:03,530 Okay, so we can describe simple points 23 00:01:03,530 --> 00:01:06,350 or we can also describe more complex geometries 24 00:01:06,350 --> 00:01:11,350 like lines or even polygons or even multi-polygons. 25 00:01:11,350 --> 00:01:13,030 So really, everything is possible 26 00:01:13,030 --> 00:01:16,140 with geospatial data in MongoDB. 27 00:01:16,140 --> 00:01:20,060 Okay, so let's add our startLocation field here 28 00:01:24,350 --> 00:01:27,750 and then let's actually implement this geospatial data. 29 00:01:27,750 --> 00:01:32,330 And MongoDB uses a special data format called GeoJSON. 30 00:01:32,330 --> 00:01:33,663 All right, so. 31 00:01:35,080 --> 00:01:39,043 GeoJSON, in order to specify geospatial data. 32 00:01:40,370 --> 00:01:43,180 And now, how does this actually work? 33 00:01:43,180 --> 00:01:46,130 Well, this object that we specified here 34 00:01:46,130 --> 00:01:49,650 is actually, this time, not for the schema type options 35 00:01:49,650 --> 00:01:51,963 as we have it, for example, up here. 36 00:01:52,830 --> 00:01:55,970 So this object here is for the schema type options. 37 00:01:55,970 --> 00:01:57,190 Remember that? 38 00:01:57,190 --> 00:01:59,960 But now, this object here is actually really 39 00:01:59,960 --> 00:02:01,300 an embedded object. 40 00:02:01,300 --> 00:02:02,830 And so inside this object, 41 00:02:02,830 --> 00:02:05,310 we can specify a couple of properties. 42 00:02:05,310 --> 00:02:08,520 All right, and in order for this object to be recognized 43 00:02:08,520 --> 00:02:11,720 as geospatial JSON, we need the type 44 00:02:11,720 --> 00:02:14,133 and the coordinates properties, all right. 45 00:02:15,210 --> 00:02:17,340 So we need type and we need 46 00:02:19,270 --> 00:02:21,060 coordinates, all right. 47 00:02:21,060 --> 00:02:22,970 And so now, each of these fields here, 48 00:02:22,970 --> 00:02:26,490 so basically, each of these sub-fields is then gonna get 49 00:02:26,490 --> 00:02:28,470 its own schema type options. 50 00:02:28,470 --> 00:02:31,830 All right, so basically here, it's a bit nested, 51 00:02:31,830 --> 00:02:33,453 so we have one level deeper. 52 00:02:34,870 --> 00:02:37,910 Okay, so we have the type schema type options 53 00:02:37,910 --> 00:02:41,040 and then we also need schema type options for coordinates 54 00:02:41,040 --> 00:02:44,660 and again, just like we have up here in these other fields 55 00:02:44,660 --> 00:02:47,800 with the difference that these are now sub-fields. 56 00:02:47,800 --> 00:02:50,873 So type needs the type of string, 57 00:02:52,070 --> 00:02:52,903 all right, 58 00:02:53,940 --> 00:02:57,880 and the default should be point. 59 00:02:57,880 --> 00:03:00,240 So remember how I said that we can specify 60 00:03:00,240 --> 00:03:02,647 multiple geometries in MongoDB? 61 00:03:02,647 --> 00:03:04,670 And the default one is always point. 62 00:03:04,670 --> 00:03:07,990 But again, we could also specify polygons or lines 63 00:03:07,990 --> 00:03:10,380 or other geometries like that. 64 00:03:10,380 --> 00:03:12,310 But in this case, for the startLocation, 65 00:03:12,310 --> 00:03:13,910 it really should be point. 66 00:03:13,910 --> 00:03:17,060 And so let's actually make that the only possible option 67 00:03:17,060 --> 00:03:19,283 by specifying the enum, 68 00:03:20,300 --> 00:03:22,703 so the enumeration property. 69 00:03:23,700 --> 00:03:25,800 So remember, we can specify an array 70 00:03:25,800 --> 00:03:28,900 of all the possible options that this field can take 71 00:03:28,900 --> 00:03:33,290 and so in this case, we only want it to be point, all right. 72 00:03:33,290 --> 00:03:35,580 So we did that somewhere up here. 73 00:03:37,810 --> 00:03:39,750 Yeah, right here with the difficulty 74 00:03:39,750 --> 00:03:44,230 where we said it can only be either medium or difficult. 75 00:03:44,230 --> 00:03:46,800 Right, and so here, we're doing the same thing, 76 00:03:46,800 --> 00:03:50,380 but only with one option, okay. 77 00:03:50,380 --> 00:03:52,620 So we need to define the type, remember, 78 00:03:52,620 --> 00:03:55,340 and also, an array of coordinates. 79 00:03:55,340 --> 00:03:59,370 Okay, and so we do that by saying number, 80 00:03:59,370 --> 00:04:02,470 but then in these curly brackets. 81 00:04:02,470 --> 00:04:05,020 Okay, and so that basically means that we expect 82 00:04:05,020 --> 00:04:07,150 an array of numbers 83 00:04:07,150 --> 00:04:09,910 and this array, as the name says, is the coordinates 84 00:04:09,910 --> 00:04:12,420 of the point with the longitude first 85 00:04:12,420 --> 00:04:14,450 and only second, the latitude. 86 00:04:14,450 --> 00:04:16,290 And so that's a bit counterintuitive 87 00:04:16,290 --> 00:04:18,540 because usually it works the other way around. 88 00:04:18,540 --> 00:04:21,529 But in GeoJSON, that's just how it works. 89 00:04:21,529 --> 00:04:24,240 So if you were to go, for example, to Google Maps 90 00:04:24,240 --> 00:04:25,930 in order to get your coordinates, 91 00:04:25,930 --> 00:04:29,560 then you will see first the latitude and then the longitude. 92 00:04:29,560 --> 00:04:31,823 Let's actually take a look at that. 93 00:04:33,500 --> 00:04:34,333 So 94 00:04:36,070 --> 00:04:37,273 open up Maps here. 95 00:04:38,570 --> 00:04:40,423 Let's say New York. 96 00:04:41,860 --> 00:04:44,543 Okay, and if we now click somewhere here, 97 00:04:46,030 --> 00:04:48,520 say here, then we get the coordinates 98 00:04:48,520 --> 00:04:51,880 first with the latitude and second, the longitude. 99 00:04:51,880 --> 00:04:54,960 All right, and in case your not familiar with that, 100 00:04:54,960 --> 00:04:56,993 let's just zoom out a little bit here, 101 00:04:58,250 --> 00:05:00,760 so we can see the entire earth. 102 00:05:00,760 --> 00:05:01,880 Wow, what's that? 103 00:05:02,757 --> 00:05:04,220 Okay. 104 00:05:04,220 --> 00:05:07,610 So the latitude is basically the horizontal position 105 00:05:07,610 --> 00:05:10,680 measured in degrees starting from the equator, 106 00:05:10,680 --> 00:05:13,280 so from here to up here. 107 00:05:13,280 --> 00:05:15,350 So in the equator, it's zero degrees 108 00:05:15,350 --> 00:05:18,770 and up here, in the North Pole, it's 90 degrees. 109 00:05:18,770 --> 00:05:19,980 And then the longitude 110 00:05:19,980 --> 00:05:23,150 is just the same thing, but vertically. 111 00:05:23,150 --> 00:05:27,440 So it's the position starting from a meridian, 112 00:05:27,440 --> 00:05:30,850 which passes somewhere here, okay. 113 00:05:30,850 --> 00:05:33,410 And so the longitude is the vertical position 114 00:05:33,410 --> 00:05:34,960 starting from here. 115 00:05:34,960 --> 00:05:37,783 And so that's why this point here that we got, 116 00:05:40,150 --> 00:05:41,183 somewhere here, 117 00:05:42,070 --> 00:05:45,400 somewhere here in Manhattan, has a latitude of 40 118 00:05:45,400 --> 00:05:48,380 and a longitude of -73. 119 00:05:48,380 --> 00:05:49,650 All right. 120 00:05:49,650 --> 00:05:54,540 But anyway, let's go back to our code here, of course, 121 00:05:54,540 --> 00:05:58,653 because I also want to specify a property for the address. 122 00:06:01,060 --> 00:06:05,600 So add another string and then also, a description 123 00:06:05,600 --> 00:06:07,457 of this startLocation 124 00:06:08,890 --> 00:06:12,070 and that again, as a string, all right. 125 00:06:12,070 --> 00:06:14,060 And we're not gonna say that any of these fields 126 00:06:14,060 --> 00:06:16,930 should be required because we want to be allowed 127 00:06:16,930 --> 00:06:19,490 to leave the startLocation blank. 128 00:06:19,490 --> 00:06:23,520 Okay, so again, in order to specify geospatial data 129 00:06:23,520 --> 00:06:27,500 with MongoDB, we basically need to create a new object 130 00:06:27,500 --> 00:06:28,980 such as we did here. 131 00:06:28,980 --> 00:06:32,290 And that object then needs to have at least two field names. 132 00:06:32,290 --> 00:06:35,140 So coordinates has this array of numbers 133 00:06:35,140 --> 00:06:38,010 and then the type, which should be of type string 134 00:06:38,010 --> 00:06:40,770 and should be either point or some other 135 00:06:40,770 --> 00:06:43,670 of these other geometries that I just told you about before. 136 00:06:43,670 --> 00:06:47,260 Okay, and we can then of course add some more fields 137 00:06:47,260 --> 00:06:50,840 to this object such as we did here, all right. 138 00:06:50,840 --> 00:06:53,430 Now, remember how in the last lecture we said 139 00:06:53,430 --> 00:06:55,920 how we were gonna embed all the locations 140 00:06:55,920 --> 00:06:57,650 into the tour documents? 141 00:06:57,650 --> 00:07:00,600 But right now, the startLocation here is not really 142 00:07:00,600 --> 00:07:02,340 a document itself. 143 00:07:02,340 --> 00:07:03,590 It's really just an object 144 00:07:03,590 --> 00:07:06,070 describing a certain point on earth. 145 00:07:06,070 --> 00:07:08,520 But in order to really create new documents 146 00:07:08,520 --> 00:07:11,250 and then embed them into another document, 147 00:07:11,250 --> 00:07:14,220 we actually need to create an array, all right. 148 00:07:14,220 --> 00:07:17,350 So it's actually very similar to what we already have here, 149 00:07:17,350 --> 00:07:19,050 but it needs to be an array. 150 00:07:19,050 --> 00:07:21,743 And so that's what we're gonna do with our locations. 151 00:07:25,190 --> 00:07:28,730 So locations, and now, I'm creating an array. 152 00:07:28,730 --> 00:07:31,740 And then in this array is where I'm gonna specify 153 00:07:31,740 --> 00:07:35,640 the object such as I did it before in startLocation. 154 00:07:35,640 --> 00:07:38,140 Okay, and you will see what this will look like 155 00:07:38,140 --> 00:07:41,430 in a second in the Compass application. 156 00:07:41,430 --> 00:07:44,693 Okay, and so now, it's actually quite the same as before. 157 00:07:47,530 --> 00:07:50,220 So the type, remember, for geospatial data 158 00:07:50,220 --> 00:07:51,263 needs to be string. 159 00:07:52,640 --> 00:07:54,383 The default needs to be point. 160 00:07:57,540 --> 00:08:01,323 And also, it cannot be anything but point, okay. 161 00:08:02,950 --> 00:08:03,783 So point. 162 00:08:05,610 --> 00:08:09,010 Again, we need the coordinates as an array of numbers 163 00:08:11,000 --> 00:08:13,470 and also, for all of these other locations, 164 00:08:13,470 --> 00:08:16,573 we still want to specify an address and a description. 165 00:08:24,550 --> 00:08:28,153 So string and here, I also want to specify the date, 166 00:08:29,920 --> 00:08:31,250 so as a number. 167 00:08:31,250 --> 00:08:34,080 And this date will basically be the day of the tour 168 00:08:34,080 --> 00:08:37,590 in which people will go to this location. 169 00:08:37,590 --> 00:08:39,460 Now, if we wanted to make it simpler, 170 00:08:39,460 --> 00:08:42,530 we could delete the startLocation all together 171 00:08:42,530 --> 00:08:44,740 and then simply define the first location 172 00:08:44,740 --> 00:08:48,300 as the startLocation and set it to day number zero. 173 00:08:48,300 --> 00:08:50,960 All right, but I decided it's nice to also have 174 00:08:50,960 --> 00:08:53,970 the startLocation as a separate field. 175 00:08:53,970 --> 00:08:57,390 Okay, so this is how you create embedded documents. 176 00:08:57,390 --> 00:09:01,630 Remember we always need to use this array, okay. 177 00:09:01,630 --> 00:09:04,800 And so by specifying basically an array of objects, 178 00:09:04,800 --> 00:09:07,220 this will then create brand new documents 179 00:09:07,220 --> 00:09:09,150 inside of the parent document, 180 00:09:09,150 --> 00:09:11,000 which is, in this case, the tour. 181 00:09:11,000 --> 00:09:13,790 All right, now, in order to create some locations, 182 00:09:13,790 --> 00:09:17,080 I'm actually going to import all our original data. 183 00:09:17,080 --> 00:09:19,570 All right, so instead of creating new tours, 184 00:09:19,570 --> 00:09:21,040 I will delete the ones we have 185 00:09:21,040 --> 00:09:23,610 and then import the complete data. 186 00:09:23,610 --> 00:09:25,283 So here, in dev-data, 187 00:09:26,390 --> 00:09:29,313 remember that before we imported tours-simple. 188 00:09:30,350 --> 00:09:32,820 Okay, so this kind of data here. 189 00:09:32,820 --> 00:09:36,020 But we also have tours and this then actually has 190 00:09:37,818 --> 00:09:41,272 the locations and the startLocation. 191 00:09:41,272 --> 00:09:43,890 So I'm not sure where that startLocation is. 192 00:09:43,890 --> 00:09:45,580 Ah, here it is. 193 00:09:45,580 --> 00:09:48,177 So this is how we specify the startLocation 194 00:09:48,177 --> 00:09:51,150 and you see that we have type set to point. 195 00:09:51,150 --> 00:09:53,520 We have our array of coordinates. 196 00:09:53,520 --> 00:09:56,660 And then of course, we have description and address. 197 00:09:56,660 --> 00:10:01,000 And then down here, in the location, we have an array, 198 00:10:01,000 --> 00:10:03,820 which then contains one object for each location. 199 00:10:03,820 --> 00:10:07,550 And you see that actually each of them gets their own id. 200 00:10:07,550 --> 00:10:09,260 And so these really are documents 201 00:10:09,260 --> 00:10:11,360 and not just simple objects. 202 00:10:11,360 --> 00:10:15,480 All right, so let's go here to our import-dev-data 203 00:10:15,480 --> 00:10:18,673 and replace this here just with tours. 204 00:10:20,700 --> 00:10:25,000 Give it a save and then remember, we need first to delete 205 00:10:25,000 --> 00:10:26,133 and then to import. 206 00:10:27,060 --> 00:10:29,063 So going to another console here. 207 00:10:30,140 --> 00:10:32,213 We now want to run node, 208 00:10:33,860 --> 00:10:36,750 dev-data and then import, 209 00:10:36,750 --> 00:10:40,063 so actually, in the data folder, and then import. 210 00:10:41,520 --> 00:10:46,520 And start by deleting and let's wait for it and indeed, 211 00:10:47,790 --> 00:10:48,793 and now, import. 212 00:10:53,500 --> 00:10:55,060 And here we go. 213 00:10:55,060 --> 00:10:56,763 And let's check out Compass now. 214 00:10:58,680 --> 00:10:59,953 Come to our tours. 215 00:11:01,830 --> 00:11:05,080 And so indeed, you now see the startLocation here 216 00:11:05,080 --> 00:11:06,660 as an object. 217 00:11:06,660 --> 00:11:08,500 Okay, and when you open that up, 218 00:11:08,500 --> 00:11:10,730 you see all the data that I just showed you before 219 00:11:10,730 --> 00:11:12,390 in the JSON file. 220 00:11:12,390 --> 00:11:15,140 Right, then here, also, the locations, 221 00:11:15,140 --> 00:11:17,200 which you see as an array, so type array. 222 00:11:17,200 --> 00:11:21,010 And then in there, we have all of these objects 223 00:11:21,010 --> 00:11:25,000 and each object then also has its object id. 224 00:11:25,000 --> 00:11:28,680 Okay, and so again, this is proof that we have now created, 225 00:11:28,680 --> 00:11:31,450 embedded, or de-normalized datasets, 226 00:11:31,450 --> 00:11:34,980 so datasets that have a really close relationship 227 00:11:34,980 --> 00:11:36,810 with the tours data. 228 00:11:36,810 --> 00:11:39,450 And so that's why we chose to really make it part 229 00:11:39,450 --> 00:11:42,780 of the tours instead of creating its own collection 230 00:11:42,780 --> 00:11:45,060 just for locations, right. 231 00:11:45,060 --> 00:11:48,073 So we will actually use this a bit later in this section 232 00:11:48,073 --> 00:11:52,570 once we start to create some special geospatial queries. 233 00:11:52,570 --> 00:11:55,120 Okay, and with geospatial queries, 234 00:11:55,120 --> 00:11:57,300 we can do really amazing stuff 235 00:11:57,300 --> 00:12:00,570 like finding locations data closest to certain points 236 00:12:00,570 --> 00:12:03,220 or find all locations inside a certain radius 237 00:12:03,220 --> 00:12:04,790 or a certain sphere. 238 00:12:04,790 --> 00:12:09,260 And really, the possibilities are absolutely endless, okay. 239 00:12:09,260 --> 00:12:11,760 So we will just see some applications of this 240 00:12:11,760 --> 00:12:13,670 by the end of this section 241 00:12:13,670 --> 00:12:16,090 because for now, I really just wanted to show you 242 00:12:16,090 --> 00:12:20,183 how we can create embedded datasets just as we just did. 19062

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