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,130
So in the last lecture, we learned about
2
00:00:03,130 --> 00:00:06,010
Mongoose schemas and models,
3
00:00:06,010 --> 00:00:08,260
and so let's now implement a very simple
4
00:00:08,260 --> 00:00:11,173
schema and model for our application.
5
00:00:12,920 --> 00:00:14,990
And for now, let's do that right here
6
00:00:14,990 --> 00:00:17,330
in our server.js file.
7
00:00:17,330 --> 00:00:19,020
Later, of course, we're gonna move
8
00:00:19,020 --> 00:00:21,370
that into a different file.
9
00:00:21,370 --> 00:00:24,560
So, Mongoose is all about models,
10
00:00:24,560 --> 00:00:26,960
and a model is like a blueprint
11
00:00:26,960 --> 00:00:29,420
that we use to create documents.
12
00:00:29,420 --> 00:00:32,290
So it's a bit like classes in JavaScript,
13
00:00:32,290 --> 00:00:35,080
which we also kind of use as blueprints
14
00:00:35,080 --> 00:00:38,590
in order to create objects out of them, right?
15
00:00:38,590 --> 00:00:41,500
So again, we create a model in Mongoose
16
00:00:41,500 --> 00:00:44,000
in order to create documents using it,
17
00:00:44,000 --> 00:00:47,670
and also to query update and delete these documents.
18
00:00:47,670 --> 00:00:50,840
So basically, to perform each of the CRUD operation,
19
00:00:50,840 --> 00:00:53,420
so create, read, update, and delete,
20
00:00:53,420 --> 00:00:56,520
we need a Mongoose model, and in order to
21
00:00:56,520 --> 00:00:59,520
create a model, we actually need a schema.
22
00:00:59,520 --> 00:01:01,700
So, we actually create models out of
23
00:01:01,700 --> 00:01:03,820
Mongoose schema just like we learned
24
00:01:03,820 --> 00:01:06,490
in the last video, and we use the schema
25
00:01:06,490 --> 00:01:09,910
to describe our data, to set default values,
26
00:01:09,910 --> 00:01:13,660
to validate the data, and all kinds of stuff like that.
27
00:01:13,660 --> 00:01:15,620
So just as you will see right now,
28
00:01:15,620 --> 00:01:17,930
because now we're actually gonna start creating
29
00:01:17,930 --> 00:01:20,990
a very simple schema for our tours.
30
00:01:20,990 --> 00:01:24,980
So, let's say tourSchema
31
00:01:28,300 --> 00:01:32,363
is a new mongoose.Schema.
32
00:01:33,852 --> 00:01:36,752
Add that in here we actually pass our schema as an object.
33
00:01:37,590 --> 00:01:40,990
All right, we can then also pass in some options
34
00:01:40,990 --> 00:01:44,090
into the schema, but I'm leaving that to a future video
35
00:01:44,090 --> 00:01:46,640
where we actually need that feature.
36
00:01:46,640 --> 00:01:49,020
So, remember the tour documents that we used
37
00:01:49,020 --> 00:01:51,090
to create in the last section when
38
00:01:51,090 --> 00:01:53,190
we started exploring Mongoose DB?
39
00:01:53,190 --> 00:01:54,760
So we always gave them a name,
40
00:01:54,760 --> 00:01:57,100
a rating and a price, right,
41
00:01:57,100 --> 00:01:59,226
and so let's now replicate that here
42
00:01:59,226 --> 00:02:02,010
by saying name, and then describing
43
00:02:02,010 --> 00:02:04,717
what type of data we want after name,
44
00:02:04,717 --> 00:02:07,500
and we want it to be a string.
45
00:02:07,500 --> 00:02:09,770
So Mongoose actually uses the native
46
00:02:09,770 --> 00:02:13,280
JavaScript data types, and so here we can say string,
47
00:02:13,280 --> 00:02:16,980
or after rating we can say that we want a number
48
00:02:19,394 --> 00:02:22,163
and the same as the price.
49
00:02:23,340 --> 00:02:25,890
It should also be a number, right?
50
00:02:25,890 --> 00:02:30,320
So this is the most basic way of describing our data.
51
00:02:30,320 --> 00:02:33,130
So we have a name, a rating, and a price,
52
00:02:33,130 --> 00:02:34,913
and we specified the data type
53
00:02:34,913 --> 00:02:38,150
that we expect for each of these fields.
54
00:02:38,150 --> 00:02:40,340
So again, this is the most basic way
55
00:02:40,340 --> 00:02:43,100
of describing a schema, but we can take it
56
00:02:43,100 --> 00:02:45,650
one step further by defining something called
57
00:02:45,650 --> 00:02:48,360
schema type options for each field,
58
00:02:48,360 --> 00:02:50,600
or only for some specific field.
59
00:02:50,600 --> 00:02:52,640
So let's start here with the name,
60
00:02:52,640 --> 00:02:54,270
and instead of just specifying it
61
00:02:54,270 --> 00:02:58,490
as a string, let's actually pass in another object.
62
00:02:58,490 --> 00:03:01,340
And so now, we say that we want the type
63
00:03:01,340 --> 00:03:02,850
to be string but we can now
64
00:03:02,850 --> 00:03:05,640
define a couple more options, okay?
65
00:03:05,640 --> 00:03:10,640
For example, we can say that this field is required,
66
00:03:12,070 --> 00:03:13,060
and so we simply set
67
00:03:13,060 --> 00:03:17,110
the required property here to true, all right?
68
00:03:17,110 --> 00:03:20,970
So again, this object here are the schema type options,
69
00:03:20,970 --> 00:03:23,320
and they can be different for different types,
70
00:03:23,320 --> 00:03:25,640
for example the number type has some different
71
00:03:25,640 --> 00:03:28,250
schema options than the string here,
72
00:03:28,250 --> 00:03:30,770
but many of them are also similar.
73
00:03:30,770 --> 00:03:32,630
So for example, the required, we can use it
74
00:03:32,630 --> 00:03:35,403
on number as well, and so let's do that here.
75
00:03:39,750 --> 00:03:42,776
So the type, we still want it to be a number,
76
00:03:42,776 --> 00:03:47,460
and we also want it to be required, okay?
77
00:03:47,460 --> 00:03:49,460
Now, here in the required we can actually
78
00:03:49,460 --> 00:03:52,310
specify the error that we want to be displayed
79
00:03:52,310 --> 00:03:54,020
when we're missing this field.
80
00:03:54,020 --> 00:03:55,760
So, in order to do that we just have to
81
00:03:55,760 --> 00:03:59,300
pass in an array, and the first one is true.
82
00:03:59,300 --> 00:04:01,720
So the first element is true, and the second one
83
00:04:01,720 --> 00:04:03,820
is the error string.
84
00:04:03,820 --> 00:04:08,670
Let's say, a tour must have a name,
85
00:04:08,670 --> 00:04:10,270
and then here let's do the same.
86
00:04:15,459 --> 00:04:17,490
The tour must have a price, okay?
87
00:04:17,490 --> 00:04:19,697
Then we can also set default values
88
00:04:19,697 --> 00:04:22,720
and let's do that here for the rating.
89
00:04:22,720 --> 00:04:24,640
So again, I'm gonna specify some
90
00:04:24,640 --> 00:04:27,610
schema type options here, which is not mandatory,
91
00:04:27,610 --> 00:04:29,700
so it's enough to simply define
92
00:04:29,700 --> 00:04:32,210
the type here like we did, but if you want
93
00:04:32,210 --> 00:04:34,150
some more features, then we need to to at least
94
00:04:34,150 --> 00:04:37,033
specify the schema type options object.
95
00:04:38,080 --> 00:04:42,580
Okay, and then we need to specify the type again,
96
00:04:42,580 --> 00:04:47,480
which is number, and as a default, I want it to be 4.5.
97
00:04:48,350 --> 00:04:50,990
And so if we'd now create a new tour document
98
00:04:50,990 --> 00:04:54,270
using this schema and not specifying the rating,
99
00:04:54,270 --> 00:04:58,928
it would then automatically be set to 4.5, all right?
100
00:04:58,928 --> 00:05:02,100
And just to finish, let's try another one here,
101
00:05:02,100 --> 00:05:04,853
which is to say that the name should be unique.
102
00:05:05,910 --> 00:05:09,080
So, unique and set it to true,
103
00:05:09,080 --> 00:05:11,020
and so like this, we can now have two
104
00:05:11,020 --> 00:05:14,390
tour documents with the same name, all right?
105
00:05:14,390 --> 00:05:16,550
So, this is our very basic schema,
106
00:05:16,550 --> 00:05:18,370
let's now go ahead and actually
107
00:05:18,370 --> 00:05:21,230
create a model out of it, all right?
108
00:05:21,230 --> 00:05:22,380
And that's very simple,
109
00:05:24,890 --> 00:05:28,412
we simply create a variable called Tour,
110
00:05:28,412 --> 00:05:32,390
and then mongoose.model,
111
00:05:32,390 --> 00:05:36,380
then the name of the model, which is Tour with an uppercase
112
00:05:36,380 --> 00:05:37,780
T here, all right.
113
00:05:37,780 --> 00:05:39,930
And so that's just kind of a convention
114
00:05:39,930 --> 00:05:42,500
in programming to always use uppercase
115
00:05:42,500 --> 00:05:44,720
on model names and variables.
116
00:05:44,720 --> 00:05:47,040
So here it's the same, so I also created
117
00:05:47,040 --> 00:05:49,980
this tour variable here with a capital T
118
00:05:49,980 --> 00:05:52,630
just so we know that we're dealing with a model here.
119
00:05:53,750 --> 00:05:55,940
All right, so the name of the model
120
00:05:55,940 --> 00:06:00,940
and then the schema, and that's it.
121
00:06:01,310 --> 00:06:04,210
So just like this, we created a tour
122
00:06:04,210 --> 00:06:08,210
out of the schema that we created here in the beginning.
123
00:06:08,210 --> 00:06:10,150
All right, and so in the next video
124
00:06:10,150 --> 00:06:12,570
we're gonna then use this model here
125
00:06:12,570 --> 00:06:17,220
in order to create our very first tour document, all right?
126
00:06:17,220 --> 00:06:21,300
So just a recap here, we used new mongoose.Schema here
127
00:06:21,300 --> 00:06:24,525
to specify a schema for our data.
128
00:06:24,525 --> 00:06:27,870
So, basically describing it and also doing some validation.
129
00:06:27,870 --> 00:06:29,800
For example, this required here,
130
00:06:29,800 --> 00:06:32,580
this is actually something called a validator
131
00:06:32,580 --> 00:06:35,120
because it is used to validate our data.
132
00:06:35,120 --> 00:06:37,330
In this case, simply to validate
133
00:06:37,330 --> 00:06:39,390
if the name is actually there.
134
00:06:39,390 --> 00:06:41,757
And there are a lot of validators in Mongoose,
135
00:06:41,757 --> 00:06:44,200
and we can actually also create our own,
136
00:06:44,200 --> 00:06:46,400
and so of course we're gonna talk about that
137
00:06:46,400 --> 00:06:50,186
a bit later, again, once we actually need these features.
138
00:06:50,186 --> 00:06:52,600
Anyway, let's now quickly move on
139
00:06:52,600 --> 00:06:54,540
in order to finally start using
140
00:06:54,540 --> 00:06:56,113
the model that we just created.
10979
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.