All language subtitles for 008 Another Way of Creating Documents_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,300 --> 00:00:02,640 So you already learnt 2 00:00:02,640 --> 00:00:05,930 how to create new documents in the database. 3 00:00:05,930 --> 00:00:07,610 But in this lecture I'm going to show you 4 00:00:07,610 --> 00:00:10,940 an easier and even better way of doing so, 5 00:00:10,940 --> 00:00:13,933 as we implement our create tour handler. 6 00:00:15,620 --> 00:00:17,620 So at this point our API 7 00:00:17,620 --> 00:00:19,690 basically doesn't do anything anymore. 8 00:00:19,690 --> 00:00:21,140 It doesn't work anymore 9 00:00:21,140 --> 00:00:23,850 because basically we deleted all the functionality 10 00:00:23,850 --> 00:00:25,760 that we had in the last video. 11 00:00:25,760 --> 00:00:28,740 And we did so, so that over the next couple of lectures 12 00:00:28,740 --> 00:00:32,229 we can rebuild it using a real database. 13 00:00:32,229 --> 00:00:36,810 Okay, so basically finally building our real API. 14 00:00:36,810 --> 00:00:38,500 And we're gonna start by implementing 15 00:00:38,500 --> 00:00:39,957 the createTour function. 16 00:00:39,957 --> 00:00:42,260 But just remember the handler function 17 00:00:42,260 --> 00:00:45,300 that is called as soon as there is a post request 18 00:00:45,300 --> 00:00:47,420 to the tours route. 19 00:00:47,420 --> 00:00:50,460 So that's what we have here in tourRoutes. 20 00:00:51,300 --> 00:00:53,320 So let's put that here. 21 00:00:53,320 --> 00:00:56,930 So what I just said is this. 22 00:00:56,930 --> 00:00:59,940 So we have this checkBody here. 23 00:00:59,940 --> 00:01:01,450 Which actually is something 24 00:01:01,450 --> 00:01:03,663 that we will be able to delete as well. 25 00:01:04,920 --> 00:01:06,313 So where is that, actually? 26 00:01:07,583 --> 00:01:09,120 checkBody 27 00:01:09,120 --> 00:01:12,750 alright, so this is yet another of these functions 28 00:01:12,750 --> 00:01:14,290 that we really don't need anymore. 29 00:01:14,290 --> 00:01:17,180 Because this was basically to validate the body. 30 00:01:17,180 --> 00:01:22,060 So to see if it had the name or the price property in them. 31 00:01:22,060 --> 00:01:22,900 Right? 32 00:01:22,900 --> 00:01:24,690 But now our mongoose model 33 00:01:24,690 --> 00:01:26,650 is actually gonna take care of that. 34 00:01:26,650 --> 00:01:28,830 And so again, this here was nice 35 00:01:28,830 --> 00:01:31,900 to actually show us how middle-ware works 36 00:01:31,900 --> 00:01:34,143 but now we can get rid of it. 37 00:01:35,490 --> 00:01:39,410 Okay, and so I'm gonna delete it from here as well. 38 00:01:39,410 --> 00:01:40,393 Give it a new save. 39 00:01:41,474 --> 00:01:43,400 And it's now back to working. 40 00:01:43,400 --> 00:01:45,660 Anyway the function that we're creating now 41 00:01:45,660 --> 00:01:48,000 is this createTour function. 42 00:01:48,000 --> 00:01:50,050 Where just the one data is going to get called 43 00:01:50,050 --> 00:01:54,690 as soon as someone hits the tour route with a post request. 44 00:01:54,690 --> 00:01:57,030 Okay, so just to recap that 45 00:01:57,030 --> 00:01:59,150 because I know that it can be a bit confusing 46 00:01:59,150 --> 00:02:02,190 with these different files and different folders 47 00:02:02,190 --> 00:02:03,980 and different functions. 48 00:02:03,980 --> 00:02:05,430 But it's also really important 49 00:02:05,430 --> 00:02:07,610 that we start organizing our code 50 00:02:07,610 --> 00:02:08,860 right from the beginning. 51 00:02:09,940 --> 00:02:10,900 Okay? 52 00:02:10,900 --> 00:02:14,710 Anyway, we are here in the createTour function. 53 00:02:14,710 --> 00:02:17,200 And so let's now actually create a new tour. 54 00:02:17,200 --> 00:02:19,270 And we're gonna do that based on the data 55 00:02:19,270 --> 00:02:21,290 that comes in from the body. 56 00:02:21,290 --> 00:02:22,640 Remember that? 57 00:02:22,640 --> 00:02:24,980 Now remember how we used to create documents 58 00:02:24,980 --> 00:02:26,363 a couple of lectures ago. 59 00:02:27,470 --> 00:02:29,253 So we did it like this. 60 00:02:30,690 --> 00:02:32,487 For example let's say newTour 61 00:02:33,327 --> 00:02:35,077 then equal to newTour 62 00:02:37,910 --> 00:02:40,014 and then the data in there. 63 00:02:40,014 --> 00:02:44,181 So we did it like this and then that's a new tour. 64 00:02:46,087 --> 00:02:48,504 And then we type newTour.save 65 00:02:50,290 --> 00:02:51,920 and that works kinda fine. 66 00:02:51,920 --> 00:02:54,780 But we can do it in an even easier way. 67 00:02:54,780 --> 00:02:58,010 So instead of doing this we can do 68 00:03:02,220 --> 00:03:05,690 Tour.create and then paste the data in there. 69 00:03:05,690 --> 00:03:08,070 Okay and that will do the exact same thing. 70 00:03:08,070 --> 00:03:10,900 The main difference is that in this version here 71 00:03:10,900 --> 00:03:14,170 we basically call the method directly on the tour 72 00:03:14,170 --> 00:03:17,330 while in this first version we called the method 73 00:03:17,330 --> 00:03:18,970 on the new document. 74 00:03:18,970 --> 00:03:21,560 Okay, and so that is completely different. 75 00:03:21,560 --> 00:03:23,940 So again we had the tour that we created 76 00:03:23,940 --> 00:03:24,920 from the model. 77 00:03:24,920 --> 00:03:27,920 And then on that tour we used the save method. 78 00:03:27,920 --> 00:03:30,720 Because the document has access to this method 79 00:03:30,720 --> 00:03:33,030 and a lot of other methods as well. 80 00:03:33,030 --> 00:03:35,040 But here in the second situation 81 00:03:35,040 --> 00:03:39,373 we call this create method right on the model itself, okay? 82 00:03:40,560 --> 00:03:45,463 Now remember how this save method here returned a promise. 83 00:03:46,480 --> 00:03:49,670 And so this create here does return a promise as well. 84 00:03:49,670 --> 00:03:52,630 And so in order to get access to the file document 85 00:03:52,630 --> 00:03:54,690 as it was created in the database, 86 00:03:54,690 --> 00:03:58,880 we would then to have used .then okay? 87 00:03:58,880 --> 00:04:01,810 But instead of using promises like this, 88 00:04:01,810 --> 00:04:03,920 I'm gonna start using async await. 89 00:04:03,920 --> 00:04:04,860 Alright. 90 00:04:04,860 --> 00:04:07,960 So this function here should be an async function. 91 00:04:07,960 --> 00:04:09,900 So all we need to do 92 00:04:09,900 --> 00:04:12,250 is to write async right here. 93 00:04:12,250 --> 00:04:15,760 So we have async and so we can now await the result 94 00:04:15,760 --> 00:04:16,903 of this promise here. 95 00:04:18,255 --> 00:04:21,010 So I hope you are familiar with this. 96 00:04:21,010 --> 00:04:23,030 And I actually have a section in this course 97 00:04:23,030 --> 00:04:25,890 that deals with exactly this kind of stuff. 98 00:04:25,890 --> 00:04:27,490 So if you didn't watch that section 99 00:04:27,490 --> 00:04:30,920 but are still not 100% familiar with async await 100 00:04:30,920 --> 00:04:33,280 then please go ahead and watch that section 101 00:04:33,280 --> 00:04:36,040 so that you really understand what's going on here. 102 00:04:36,040 --> 00:04:39,270 Okay, so instead of using this then here 103 00:04:39,270 --> 00:04:40,960 I'm gonna use async await 104 00:04:40,960 --> 00:04:43,790 and then save the result value of this promise 105 00:04:43,790 --> 00:04:45,413 in the new tour variable. 106 00:04:49,220 --> 00:04:52,020 Okay, now the final piece of the puzzle here 107 00:04:52,020 --> 00:04:56,410 is to of course pass some real data into this create method. 108 00:04:56,410 --> 00:04:58,410 And so instead of this empty object 109 00:04:58,410 --> 00:05:01,310 we're gonna pass in the request body 110 00:05:01,310 --> 00:05:05,020 so req.body and so that's the data 111 00:05:05,020 --> 00:05:08,010 that comes with the post request, right? 112 00:05:08,010 --> 00:05:09,290 Now just one more time, 113 00:05:09,290 --> 00:05:12,600 just to make sure that everything is clear to you. 114 00:05:12,600 --> 00:05:15,920 Okay so we can use the tour model directly 115 00:05:15,920 --> 00:05:18,340 and call the create method on it. 116 00:05:18,340 --> 00:05:20,630 Then into that function we pass the data 117 00:05:20,630 --> 00:05:23,600 that we want to store in the database as a new tour. 118 00:05:23,600 --> 00:05:26,810 And that data comes from the post body, right? 119 00:05:26,810 --> 00:05:30,730 And so that's stored inside of request dot body. 120 00:05:30,730 --> 00:05:32,460 So this variable here. 121 00:05:32,460 --> 00:05:35,503 Now this method here will then return a promise. 122 00:05:36,473 --> 00:05:38,850 And we await that promise using async await 123 00:05:38,850 --> 00:05:42,000 and then store that result into the newTour variable 124 00:05:42,000 --> 00:05:44,050 which will be the newly created document 125 00:05:44,050 --> 00:05:48,083 already with the ID and everything, okay? 126 00:05:49,700 --> 00:05:51,130 So I'm gonna keep this code here 127 00:05:51,130 --> 00:05:53,160 just as a reference. 128 00:05:53,160 --> 00:05:57,210 And for now let's get this piece of data here back. 129 00:05:57,210 --> 00:05:58,363 Piece of code actually. 130 00:05:59,250 --> 00:06:00,720 Give it a save. 131 00:06:00,720 --> 00:06:03,950 And now we get this ES lint error. 132 00:06:03,950 --> 00:06:05,360 So let's take a look at that 133 00:06:05,360 --> 00:06:07,300 just put our mouse on here. 134 00:06:07,300 --> 00:06:10,500 And it tells us that async functions are not supported 135 00:06:10,500 --> 00:06:13,230 until this node 7.6 136 00:06:13,230 --> 00:06:16,140 and so this ES lint error comes from that node plugin 137 00:06:16,140 --> 00:06:17,320 that we actually installed. 138 00:06:17,320 --> 00:06:18,450 So you can see that here. 139 00:06:18,450 --> 00:06:21,410 Alright, so what we're gonna to do fix this 140 00:06:21,410 --> 00:06:23,920 is to simple go to package.json 141 00:06:23,920 --> 00:06:25,600 and in here you find the node version 142 00:06:25,600 --> 00:06:27,180 that we are actually using. 143 00:06:27,180 --> 00:06:28,383 So that's very simple. 144 00:06:30,880 --> 00:06:33,790 We just need to specify the engines property 145 00:06:33,790 --> 00:06:36,673 here in our json document. 146 00:06:39,070 --> 00:06:43,830 And set node to greater or equal 147 00:06:44,850 --> 00:06:47,230 than 10. 148 00:06:47,230 --> 00:06:48,850 Okay, and that's because in this course 149 00:06:48,850 --> 00:06:51,053 we are using at least node ten. 150 00:06:52,636 --> 00:06:56,490 So 7.6 would be enough in order to make that error disappear 151 00:06:56,490 --> 00:06:58,610 but of course we specify the real version 152 00:06:58,610 --> 00:06:59,890 that we're actually using. 153 00:06:59,890 --> 00:07:01,690 So we give this one a save. 154 00:07:01,690 --> 00:07:03,010 Close that up. 155 00:07:03,010 --> 00:07:06,500 And so now our error here is actually gone. 156 00:07:06,500 --> 00:07:09,560 Now just one more step before we can actually try this out 157 00:07:09,560 --> 00:07:11,330 in our Postman app. 158 00:07:11,330 --> 00:07:14,210 And that is that we actually need to handle errors. 159 00:07:14,210 --> 00:07:17,860 Okay, and so keep in mind that with async await 160 00:07:17,860 --> 00:07:22,650 we need to test for errors using the try catch syntax. 161 00:07:22,650 --> 00:07:26,003 So we write a try block. 162 00:07:27,160 --> 00:07:28,760 Then wrap all our code in there. 163 00:07:32,065 --> 00:07:33,615 And then finally a catch block. 164 00:07:34,920 --> 00:07:39,190 Which as we already know has access to the error object. 165 00:07:39,190 --> 00:07:41,410 And now what do we actually put here? 166 00:07:41,410 --> 00:07:42,940 Well we need to think about 167 00:07:42,940 --> 00:07:45,410 when exactly an error can happen. 168 00:07:45,410 --> 00:07:47,790 So remember like two lectures ago 169 00:07:47,790 --> 00:07:50,410 when we were creating our first documents. 170 00:07:50,410 --> 00:07:51,820 We got an error back then 171 00:07:51,820 --> 00:07:53,870 when we tried to create a document 172 00:07:53,870 --> 00:07:56,600 without one of the required fields, right? 173 00:07:56,600 --> 00:07:58,700 And so that was a validation error. 174 00:07:58,700 --> 00:08:02,370 And it's one of the errors that would get catched here. 175 00:08:02,370 --> 00:08:05,290 Okay because if we tried to create a document 176 00:08:05,290 --> 00:08:07,640 let's say without one of the required fields 177 00:08:07,640 --> 00:08:09,900 then this promise that is created here 178 00:08:09,900 --> 00:08:12,430 would be rejected, okay? 179 00:08:12,430 --> 00:08:15,000 And so if we have a rejected promise here 180 00:08:15,000 --> 00:08:17,740 then it will enter the catch block. 181 00:08:17,740 --> 00:08:20,870 And so therefore, basically in this catch block here 182 00:08:20,870 --> 00:08:23,050 we want to send back a response 183 00:08:23,050 --> 00:08:25,580 saying that there was an error. 184 00:08:25,580 --> 00:08:30,580 Alright so res.status here again 185 00:08:30,670 --> 00:08:33,482 and 400 which stands for bad request. 186 00:08:35,967 --> 00:08:36,980 .json 187 00:08:37,950 --> 00:08:40,289 and now something very similar to this one 188 00:08:40,289 --> 00:08:43,309 but its status and that's fail 189 00:08:44,270 --> 00:08:48,050 and then instead of data here we send a message 190 00:08:48,970 --> 00:08:51,520 and for now lets just set the message to the error. 191 00:08:52,560 --> 00:08:53,393 Alright. 192 00:08:54,800 --> 00:08:59,260 And let's now finally get back to our Postman application 193 00:08:59,260 --> 00:09:01,643 and give this a try. 194 00:09:01,643 --> 00:09:03,990 Okay, so create this one 195 00:09:03,990 --> 00:09:06,170 and let's now create a new tour. 196 00:09:06,170 --> 00:09:07,790 So right now here we have 197 00:09:07,790 --> 00:09:11,370 the name duration difficulty and price 198 00:09:11,370 --> 00:09:13,860 and so let's actually also add the rating 199 00:09:15,400 --> 00:09:18,040 and that needs to be in double quotes 200 00:09:21,050 --> 00:09:21,883 4.7. 201 00:09:22,900 --> 00:09:25,570 Alright, and now comes the moment. 202 00:09:25,570 --> 00:09:29,330 Send and indeed here we go. 203 00:09:29,330 --> 00:09:32,170 So this is the tour 204 00:09:32,170 --> 00:09:33,430 that we just created. 205 00:09:33,430 --> 00:09:34,520 We have our rating. 206 00:09:34,520 --> 00:09:36,950 We have our name and we have our price. 207 00:09:36,950 --> 00:09:39,780 And of course the automatically created ID. 208 00:09:39,780 --> 00:09:40,890 Now you might notice 209 00:09:40,890 --> 00:09:44,360 that we have no difficulty and no price. 210 00:09:44,360 --> 00:09:46,870 Well why do you think that is? 211 00:09:46,870 --> 00:09:48,920 Well that's because these two fields 212 00:09:48,920 --> 00:09:51,030 are actually not in our schema 213 00:09:51,030 --> 00:09:54,240 and so therefore they are not put in the database. 214 00:09:54,240 --> 00:09:56,730 So everything else that is not in our schema 215 00:09:56,730 --> 00:09:57,840 is simply ignored. 216 00:09:57,840 --> 00:10:01,800 So that is the power of our schema, alright? 217 00:10:01,800 --> 00:10:05,210 Great, now let's actually try to send this again 218 00:10:05,210 --> 00:10:08,113 and so that should give us an error, right? 219 00:10:08,950 --> 00:10:10,650 And indeed there we go. 220 00:10:10,650 --> 00:10:13,340 We have our 400 bad request. 221 00:10:13,340 --> 00:10:15,200 And we have this message 222 00:10:15,200 --> 00:10:17,810 which is the complete error that we got. 223 00:10:17,810 --> 00:10:21,330 And so here we see that the error message is duplicate key. 224 00:10:21,330 --> 00:10:24,510 And so that's because we already have the Test Tour 2. 225 00:10:24,510 --> 00:10:26,563 And so it could not create another one. 226 00:10:29,330 --> 00:10:33,960 So let's just create another one here like Jonas Tour. 227 00:10:33,960 --> 00:10:35,933 It doesn't really matter, okay? 228 00:10:36,850 --> 00:10:39,083 I just wanna create it, 229 00:10:39,940 --> 00:10:42,490 first without any of this 230 00:10:42,490 --> 00:10:45,030 just to see if we get another error. 231 00:10:45,030 --> 00:10:48,070 And indeed we get some more errors here. 232 00:10:48,070 --> 00:10:50,300 This time saying that 233 00:10:50,300 --> 00:10:51,870 that the tour validation failed 234 00:10:51,870 --> 00:10:54,053 because a tour must have a price. 235 00:10:54,980 --> 00:10:57,170 Okay, so you see that right now we have 236 00:10:57,170 --> 00:11:00,090 this kind of weird error structure here. 237 00:11:00,090 --> 00:11:04,650 So Mongo DB gives back this huge complete error object. 238 00:11:04,650 --> 00:11:07,100 And later on we're actually gonna take care of that. 239 00:11:07,100 --> 00:11:10,720 So we will have an entire section on error handling alone. 240 00:11:10,720 --> 00:11:14,420 And by then we will create some more meaningful errors. 241 00:11:14,420 --> 00:11:18,080 Okay, for now let's just replace this error object 242 00:11:18,080 --> 00:11:20,490 with some normal string here. 243 00:11:20,490 --> 00:11:25,440 So let's say invalid data sent. 244 00:11:25,440 --> 00:11:27,950 Okay, so don't do something like this 245 00:11:27,950 --> 00:11:30,350 in a real production application 246 00:11:30,350 --> 00:11:32,930 but again we're gonna have some real error handling 247 00:11:32,930 --> 00:11:35,430 a bit later which is gonna take care of that. 248 00:11:35,430 --> 00:11:39,360 Okay, so displaying meaningful errors to the client. 249 00:11:39,360 --> 00:11:40,750 So let's just go back here 250 00:11:41,610 --> 00:11:43,040 send it again. 251 00:11:43,040 --> 00:11:45,950 And so now we get this normal string here. 252 00:11:45,950 --> 00:11:50,510 So let's just create the price here. 253 00:11:50,510 --> 00:11:53,520 Let's set it to 567 254 00:11:54,490 --> 00:11:55,700 then send it. 255 00:11:55,700 --> 00:11:56,860 And so now you will see 256 00:11:56,860 --> 00:11:59,813 that our default rating here is actually still working. 257 00:12:01,800 --> 00:12:05,810 Let's now figure all of this out in compass as well. 258 00:12:05,810 --> 00:12:09,860 And indeed we get our four tours in the database. 259 00:12:09,860 --> 00:12:12,210 So all these weird tests 260 00:12:12,210 --> 00:12:14,960 that we've been doing up until this point. 261 00:12:14,960 --> 00:12:19,140 So let's just go ahead and delete these last two. 262 00:12:19,140 --> 00:12:21,123 That were really just for testing. 263 00:12:24,500 --> 00:12:26,130 Alright. 264 00:12:26,130 --> 00:12:28,773 So something went wrong here I guess. 265 00:12:30,130 --> 00:12:32,782 Okay, now we're back to these two. 266 00:12:32,782 --> 00:12:34,610 Let's now just create the third one 267 00:12:34,610 --> 00:12:36,760 that we actually had before in the last section. 268 00:12:36,760 --> 00:12:38,763 Which is the Snow Adventurer. 269 00:12:42,490 --> 00:12:43,630 So the Snow 270 00:12:45,800 --> 00:12:47,080 Adventurer. 271 00:12:47,080 --> 00:12:48,280 The price was ... 272 00:12:48,280 --> 00:12:49,790 I'm not sure anymore 273 00:12:49,790 --> 00:12:51,973 like 697 maybe. 274 00:12:54,410 --> 00:12:57,870 And the rating is like six 275 00:12:57,870 --> 00:12:59,963 or actually 4.8. 276 00:13:01,360 --> 00:13:02,800 Sent that guy. 277 00:13:02,800 --> 00:13:04,600 And so indeed here we go. 278 00:13:04,600 --> 00:13:05,810 Great. 279 00:13:05,810 --> 00:13:09,050 Just to quickly recap our createTour function. 280 00:13:09,050 --> 00:13:10,740 So we have a try catch here 281 00:13:10,740 --> 00:13:13,833 because we're actually using an async await function here. 282 00:13:14,859 --> 00:13:16,100 Right, so we use async await 283 00:13:16,100 --> 00:13:18,910 because this tour.create returns a promise 284 00:13:18,910 --> 00:13:21,500 that we're awaiting so that we can then store 285 00:13:21,500 --> 00:13:23,530 the newly created tour document 286 00:13:23,530 --> 00:13:25,340 inside of this variable 287 00:13:25,340 --> 00:13:27,277 and then send it along with the response 288 00:13:27,277 --> 00:13:30,280 to the client down here. 289 00:13:30,280 --> 00:13:32,600 Okay but in case there is an error, 290 00:13:32,600 --> 00:13:34,850 like a validation error for example 291 00:13:34,850 --> 00:13:37,120 then that error is gonna be catched 292 00:13:37,120 --> 00:13:39,700 and we send something else back to the client 293 00:13:39,700 --> 00:13:41,900 with this error message. 294 00:13:41,900 --> 00:13:44,890 So this is how we create documents using mongoose. 295 00:13:44,890 --> 00:13:47,963 Next up we're gonna talk about reading documents. 22121

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