Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:01,090 --> 00:00:03,370
Let's now start creating documents,
2
00:00:03,370 --> 00:00:06,903
testing the model, and really start using Mongoose.
3
00:00:08,510 --> 00:00:10,570
And I'm really excited about this video,
4
00:00:10,570 --> 00:00:12,823
so really let's get started here.
5
00:00:14,130 --> 00:00:17,143
So what we're gonna do is to create a new variable,
6
00:00:19,000 --> 00:00:21,373
and I'm gonna call it testTour,
7
00:00:22,510 --> 00:00:24,400
and this will be a new document
8
00:00:24,400 --> 00:00:26,500
created out of the tour model
9
00:00:26,500 --> 00:00:28,460
that we created in the last lecture.
10
00:00:28,460 --> 00:00:29,520
So what we're gonna do
11
00:00:29,520 --> 00:00:33,110
is to say new Tour,
12
00:00:33,110 --> 00:00:36,443
and then in there pass an object with the data.
13
00:00:38,020 --> 00:00:39,913
So name, let's say,
14
00:00:41,920 --> 00:00:44,100
again, 'The Forest Hiker,'
15
00:00:44,100 --> 00:00:46,463
just as we've been using before,
16
00:00:47,630 --> 00:00:49,513
then the rating, let's say 4.7,
17
00:00:53,157 --> 00:00:54,740
and then the price,
18
00:00:56,010 --> 00:00:58,643
let's say 497, okay?
19
00:00:59,690 --> 00:01:02,570
So, this is, again, a new document
20
00:01:02,570 --> 00:01:04,890
that we created out of a tour model,
21
00:01:04,890 --> 00:01:06,610
or function constructors,
22
00:01:06,610 --> 00:01:08,830
and so as I said before, this is kinda
23
00:01:08,830 --> 00:01:11,390
using JavaScript function constructors,
24
00:01:11,390 --> 00:01:14,660
or JavaScript classes if you're using ES6,
25
00:01:14,660 --> 00:01:16,440
basically to create new objects
26
00:01:16,440 --> 00:01:18,370
out of a class, right,
27
00:01:18,370 --> 00:01:21,020
and so that's exactly the same syntax, actually,
28
00:01:21,020 --> 00:01:22,660
so we use the name keyword,
29
00:01:22,660 --> 00:01:24,780
and then the class name in ES6,
30
00:01:24,780 --> 00:01:27,730
just like this, all right?
31
00:01:27,730 --> 00:01:29,930
Now here, it's not exactly the same,
32
00:01:29,930 --> 00:01:31,890
but this analogy is helpful
33
00:01:31,890 --> 00:01:33,890
to understand how this works.
34
00:01:33,890 --> 00:01:36,710
So this test tour document that we just created
35
00:01:36,710 --> 00:01:39,380
is an instance of the tour model,
36
00:01:39,380 --> 00:01:41,670
and so now it has a couple of methods on it
37
00:01:41,670 --> 00:01:43,010
that we can use in order to
38
00:01:43,010 --> 00:01:44,873
interact with the database.
39
00:01:45,890 --> 00:01:47,750
So let me show that to you.
40
00:01:47,750 --> 00:01:52,030
So we can now say testTour.save,
41
00:01:52,030 --> 00:01:53,550
and this will then save it to
42
00:01:53,550 --> 00:01:56,810
the tours collection in the database, okay,
43
00:01:56,810 --> 00:01:59,060
and it's really as simple as that.
44
00:01:59,060 --> 00:02:01,700
So again, we have our document instance
45
00:02:01,700 --> 00:02:03,730
which is testTour, and on there
46
00:02:03,730 --> 00:02:05,870
we can then call the save method
47
00:02:05,870 --> 00:02:08,652
in order to save the document to the database.
48
00:02:09,490 --> 00:02:11,310
Now this save here will then return
49
00:02:11,310 --> 00:02:13,453
a promise that we can then consume.
50
00:02:15,010 --> 00:02:17,920
So for now, let's use then for that,
51
00:02:17,920 --> 00:02:19,797
and in the future, we will actually use
52
00:02:19,797 --> 00:02:23,340
async await in order to consume these promises,
53
00:02:23,340 --> 00:02:24,830
but for now, let's keep it simple
54
00:02:24,830 --> 00:02:26,880
and not create any more functions,
55
00:02:26,880 --> 00:02:28,750
and so instead, we're just using
56
00:02:28,750 --> 00:02:30,550
the then method here.
57
00:02:30,550 --> 00:02:33,010
So in here, we get access to the document
58
00:02:33,010 --> 00:02:35,123
that was just saved to the database.
59
00:02:36,920 --> 00:02:39,850
So, basically, the result value of the promise
60
00:02:39,850 --> 00:02:42,180
that the save method returns is
61
00:02:42,180 --> 00:02:45,690
the final document as it is in the database.
62
00:02:45,690 --> 00:02:47,770
And so let's now actually go ahead
63
00:02:47,770 --> 00:02:51,293
and log the document to the console, all right?
64
00:02:52,290 --> 00:02:54,620
Now, on the other hand, saving this document
65
00:02:54,620 --> 00:02:57,030
to the database might also go wrong,
66
00:02:57,030 --> 00:02:59,749
and so let's catch that error, okay?
67
00:02:59,749 --> 00:03:02,100
So just like before, we used the catch
68
00:03:02,100 --> 00:03:05,400
method in order to catch any potential errors,
69
00:03:05,400 --> 00:03:07,460
and so if there is an error when
70
00:03:07,460 --> 00:03:09,430
saving the document to the database,
71
00:03:09,430 --> 00:03:11,130
we will be able to catch that error
72
00:03:11,130 --> 00:03:12,223
here in this method.
73
00:03:14,820 --> 00:03:17,510
Okay, so basically, here in this function
74
00:03:17,510 --> 00:03:19,103
that I'm passing into catch.
75
00:03:21,570 --> 00:03:24,710
Okay, for now, all I wanna do, really,
76
00:03:24,710 --> 00:03:26,623
is to also log it to the console.
77
00:03:27,660 --> 00:03:30,470
Let's say, 'Error,' add some emojis here
78
00:03:30,470 --> 00:03:32,800
to make it more visible in the console,
79
00:03:32,800 --> 00:03:35,154
and then we can pass in a second argument
80
00:03:35,154 --> 00:03:37,990
into the console log, which will
81
00:03:37,990 --> 00:03:40,490
then be the error, okay?
82
00:03:40,490 --> 00:03:41,323
Are you ready?
83
00:03:41,323 --> 00:03:43,170
Then, let's give it a save now,
84
00:03:43,170 --> 00:03:46,260
and that will then execute the code that is in here,
85
00:03:46,260 --> 00:03:49,520
so basically create this new tour, and try to save it
86
00:03:49,520 --> 00:03:53,090
to the database right away, okay?
87
00:03:53,090 --> 00:03:54,410
So, let's give it a save now,
88
00:03:54,410 --> 00:03:56,433
and see what happens in the console,
89
00:03:58,170 --> 00:03:59,733
and indeed, here we go.
90
00:04:01,260 --> 00:04:03,700
So you see, that this is the document
91
00:04:03,700 --> 00:04:07,580
that was just saved to our database, all right?
92
00:04:07,580 --> 00:04:10,350
So here we actually see the ID as well,
93
00:04:10,350 --> 00:04:13,451
and that is simply auto-generated by MongoDB,
94
00:04:13,451 --> 00:04:16,769
and it's simply the unique identifier for the document.
95
00:04:16,769 --> 00:04:19,940
So just like it happened before in the MongoDB section,
96
00:04:19,940 --> 00:04:22,800
we automatically get this unique identifier
97
00:04:22,800 --> 00:04:24,290
for the new object.
98
00:04:24,290 --> 00:04:26,960
Then Mongoose also automatically adds
99
00:04:26,960 --> 00:04:29,800
this V, and set it to zero here,
100
00:04:29,800 --> 00:04:32,770
but that's not really important at this point, okay?
101
00:04:32,770 --> 00:04:35,090
What matters here is that our new document
102
00:04:35,090 --> 00:04:38,510
was actually successfully added to the database,
103
00:04:38,510 --> 00:04:40,920
and just to make sure, let's actually move over
104
00:04:40,920 --> 00:04:45,570
to Compass and take a look at our database there.
105
00:04:45,570 --> 00:04:48,150
So here, we have the tours collection,
106
00:04:48,150 --> 00:04:51,850
and then we have the document that we just created.
107
00:04:51,850 --> 00:04:54,940
So it has that exact same ID, and of course
108
00:04:54,940 --> 00:04:57,410
all the other data that we put in there,
109
00:04:57,410 --> 00:04:59,230
and so indeed, this is the object
110
00:04:59,230 --> 00:05:00,543
that we just created.
111
00:05:01,550 --> 00:05:03,960
And keep in mind that we had actually deleted
112
00:05:03,960 --> 00:05:05,830
the tours collection here in one
113
00:05:05,830 --> 00:05:07,800
of the previous videos, right,
114
00:05:07,800 --> 00:05:10,010
but Mongoose automatically created
115
00:05:10,010 --> 00:05:12,070
this new collection here as soon
116
00:05:12,070 --> 00:05:13,960
as we created the first document
117
00:05:13,960 --> 00:05:15,730
using the tour model,
118
00:05:15,730 --> 00:05:17,250
and so this name here basically
119
00:05:17,250 --> 00:05:19,820
comes from that tour model, it simply
120
00:05:19,820 --> 00:05:23,730
gives us this plural name, just as we had before.
121
00:05:23,730 --> 00:05:26,870
Perfect, we just made our express application
122
00:05:26,870 --> 00:05:29,660
really interact with a MongoDB database
123
00:05:29,660 --> 00:05:31,060
for the very first time,
124
00:05:31,060 --> 00:05:34,690
and that's actually really amazing, if you ask me.
125
00:05:34,690 --> 00:05:35,900
So this means that right now,
126
00:05:35,900 --> 00:05:39,343
we are able to create documents right from our code.
127
00:05:40,560 --> 00:05:43,700
So, that makes me really happy,
128
00:05:43,700 --> 00:05:45,670
and so let's actually try it again
129
00:05:45,670 --> 00:05:48,140
with another one, all right,
130
00:05:48,140 --> 00:05:49,930
but actually before we do that,
131
00:05:49,930 --> 00:05:52,630
I want to just reload this file here
132
00:05:52,630 --> 00:05:55,710
which will then try to save this document here
133
00:05:55,710 --> 00:05:58,400
to the database again, right,
134
00:05:58,400 --> 00:06:00,183
simply because all this code here is run
135
00:06:00,183 --> 00:06:03,350
each time that we save the file.
136
00:06:03,350 --> 00:06:05,945
Now, let's try to guess what is gonna happen
137
00:06:05,945 --> 00:06:07,730
as soon as I save this file.
138
00:06:07,730 --> 00:06:08,563
Can you guess?
139
00:06:09,930 --> 00:06:11,610
Let's wait for it,
140
00:06:11,610 --> 00:06:14,160
and indeed we get something different now,
141
00:06:14,160 --> 00:06:16,000
we get an error here,
142
00:06:16,000 --> 00:06:18,260
and the error that we see is this
143
00:06:18,260 --> 00:06:20,940
duplicate key error collection,
144
00:06:20,940 --> 00:06:25,940
which down here says this duplicate key, okay?
145
00:06:26,210 --> 00:06:28,520
So we already have a tour with the name
146
00:06:28,520 --> 00:06:30,680
of 'Forest Hiker,' and so now we were
147
00:06:30,680 --> 00:06:32,843
trying to create another one,
148
00:06:32,843 --> 00:06:35,170
and since in our schema we have this
149
00:06:35,170 --> 00:06:37,817
unique property here, that is not allowed,
150
00:06:37,817 --> 00:06:39,370
remember that?
151
00:06:39,370 --> 00:06:40,852
So we set this unique here to true
152
00:06:40,852 --> 00:06:43,250
in order to make it impossible
153
00:06:43,250 --> 00:06:45,810
to have two tours with the same name,
154
00:06:45,810 --> 00:06:48,743
and so we just proved that this is actually working.
155
00:06:49,580 --> 00:06:51,990
All right, so let's simple replace
156
00:06:51,990 --> 00:06:53,370
the code that we have here
157
00:06:53,370 --> 00:06:56,173
in order to create a new tour with another name.
158
00:06:57,060 --> 00:06:59,917
Let's call it 'The Park Camper,'
159
00:07:01,640 --> 00:07:04,560
and let's go ahead and remove the price
160
00:07:04,560 --> 00:07:05,943
and also the rating.
161
00:07:06,890 --> 00:07:09,403
So, can you guess what's gonna happen now?
162
00:07:10,280 --> 00:07:12,450
Let's actually clear, or actually it
163
00:07:12,450 --> 00:07:14,370
already loaded it because as soon
164
00:07:14,370 --> 00:07:17,190
as I clicked here, it then saved the file,
165
00:07:17,190 --> 00:07:20,560
and so, yeah we just got another error,
166
00:07:20,560 --> 00:07:22,530
so you can see that up here,
167
00:07:22,530 --> 00:07:24,620
meaning that we didn't successfully save
168
00:07:24,620 --> 00:07:27,170
this document to the database,
169
00:07:27,170 --> 00:07:30,200
and what we got here now is a validation error
170
00:07:30,200 --> 00:07:32,090
coming from the price field
171
00:07:32,090 --> 00:07:34,710
saying 'A Tour must have a price,'
172
00:07:34,710 --> 00:07:36,670
and so that is exactly the message
173
00:07:36,670 --> 00:07:39,970
that we specified up here, right?
174
00:07:39,970 --> 00:07:42,160
Simply because in this line we said
175
00:07:42,160 --> 00:07:45,320
that the price is a required field, all right,
176
00:07:45,320 --> 00:07:47,050
and so this required, as I mentioned,
177
00:07:47,050 --> 00:07:49,750
is a validator, and so down here,
178
00:07:49,750 --> 00:07:52,260
we then get a validation error.
179
00:07:52,260 --> 00:07:53,520
And so let's now fix that
180
00:07:55,860 --> 00:08:00,050
and specify the price, let's say 997,
181
00:08:00,050 --> 00:08:01,460
and give it another save.
182
00:08:01,460 --> 00:08:03,310
Now this time, it should work
183
00:08:03,310 --> 00:08:06,010
because the rating is not required,
184
00:08:06,010 --> 00:08:07,780
and so when we come down here,
185
00:08:07,780 --> 00:08:09,930
our document was actually successfully
186
00:08:09,930 --> 00:08:13,060
saved to the database, you see?
187
00:08:13,060 --> 00:08:15,450
Now, we didn't specify the rating here
188
00:08:15,450 --> 00:08:19,240
in this test tour, but you see it's still 4.5,
189
00:08:19,240 --> 00:08:20,800
and that is because we set
190
00:08:20,800 --> 00:08:23,770
the default to 4.5 up here.
191
00:08:23,770 --> 00:08:24,750
So I just wanted to show you
192
00:08:24,750 --> 00:08:26,763
that here in this quick example.
193
00:08:27,770 --> 00:08:30,810
Okay, so we were successful again,
194
00:08:30,810 --> 00:08:33,210
so let's come back here, reload,
195
00:08:33,210 --> 00:08:35,690
you're clicking this button, and indeed
196
00:08:35,690 --> 00:08:37,840
we now get our two tours.
197
00:08:37,840 --> 00:08:40,929
Great, and I remember how amazing it felt
198
00:08:40,929 --> 00:08:43,370
for me when this worked the first time
199
00:08:43,370 --> 00:08:46,250
when I was starting to learn Express and Mongo,
200
00:08:46,250 --> 00:08:48,120
and how to build these applications,
201
00:08:48,120 --> 00:08:50,240
and so I really hope that you're
202
00:08:50,240 --> 00:08:52,130
feeling the same way right now,
203
00:08:52,130 --> 00:08:54,100
as you just created your very first
204
00:08:54,100 --> 00:08:56,033
documents using Express
205
00:08:56,033 --> 00:08:57,823
and, of course, MongoDB.
15264
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.