Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:00,370 --> 00:00:00,740
All right.
2
00:00:00,750 --> 00:00:07,080
So in the previous module we looked at how we would use MongoDB in the command line through the use
3
00:00:07,140 --> 00:00:08,380
of the Mongo shell.
4
00:00:08,430 --> 00:00:16,379
And that's pretty much MongoDB in its purest form in an isolated setting. But that's no use to us because
5
00:00:16,379 --> 00:00:19,230
we want to build applications that have databases
6
00:00:19,230 --> 00:00:19,800
right?
7
00:00:19,860 --> 00:00:25,860
So we need to learn how to integrate all MongoDB database with on Node.js application.
8
00:00:25,860 --> 00:00:28,680
And that is what this module is all about.
9
00:00:29,850 --> 00:00:35,270
Now when you're creating a Node app that needs to connect to a MongoDB database
10
00:00:35,430 --> 00:00:39,080
there's essentially two options for you to choose from.
11
00:00:39,180 --> 00:00:44,450
One is to use the MongoDB native driver that we're going to talk about very quickly.
12
00:00:44,700 --> 00:00:50,850
Another is to use a ODM or an Object Document Mapper that's called mongoose.
13
00:00:50,850 --> 00:00:57,570
Now the most popular way of working with MongoDB and Node.js is through using this package called
14
00:00:57,660 --> 00:00:58,920
mongoose.
15
00:00:58,920 --> 00:01:05,700
And the reason is because it vastly simplifies and cuts down on the code that's required in order to
16
00:01:05,700 --> 00:01:08,220
work with your MongoDB database.
17
00:01:08,340 --> 00:01:14,340
But I want to show you first how the native MongoDB driver would work and then we'll go through how
18
00:01:14,340 --> 00:01:21,300
to use mongoose just so that you can see for yourself just how much easier it is to incorporate mongoose
19
00:01:21,300 --> 00:01:24,550
and it makes your life as a developer so much better.
20
00:01:24,570 --> 00:01:30,970
But first let's get started and take a look at how we would use the MongoDB native driver.
21
00:01:30,990 --> 00:01:37,310
Firstly I want to head over to the MongoDB documentation at docs.mongodb.com.
22
00:01:37,530 --> 00:01:45,160
And here we're going to head over to the tab that's called drivers. And on the left hand pane here you can
23
00:01:45,160 --> 00:01:49,560
see that there's a whole bunch of drivers for different languages.
24
00:01:49,780 --> 00:01:56,950
Now the driver is what's going to enable our MongoDB to interact with our application and depending on
25
00:01:57,010 --> 00:02:02,770
which language your application was developed with then you'll need to use a different driver.
26
00:02:02,770 --> 00:02:10,000
Now in our case we're going to choose Node.js and we're going to view the latest documentation. And from
27
00:02:10,000 --> 00:02:15,940
here we're going to head over to quick starts and it details pretty much step by step how you would
28
00:02:15,940 --> 00:02:20,860
get started using the native MongoDB Node.js driver.
29
00:02:20,860 --> 00:02:22,540
Well that's quite a long sentence.
30
00:02:22,540 --> 00:02:29,080
So essentially what we're trying to do is we're trying to glue together our MongoDB database with
31
00:02:29,210 --> 00:02:31,090
our Node.js application.
32
00:02:31,090 --> 00:02:37,600
And this is going to be the syntax and the code and we're going to install the driver to enable us to
33
00:02:37,600 --> 00:02:38,210
do that.
34
00:02:39,140 --> 00:02:43,780
First things first, we're going to need a new project. For this project
35
00:02:43,790 --> 00:02:49,220
I've decided that I'm going to make a database of fruits and I'm going to rate all the fruits that I've
36
00:02:49,220 --> 00:02:50,000
tried.
37
00:02:50,000 --> 00:02:56,150
And there's some really wacky ones out there that I've come across through my travels and I think it's
38
00:02:56,150 --> 00:03:03,200
a pretty nice way of showing you how to work with MongoDB and Node. CD over to wherever you keep
39
00:03:03,230 --> 00:03:04,770
all of your development files
40
00:03:04,790 --> 00:03:11,360
and then we're going to create a new directory and that's going to be called FruitsProject. And then
41
00:03:11,420 --> 00:03:13,780
we're going to head over to FruitsProject
42
00:03:14,030 --> 00:03:17,060
and here we're going to create a new app.
43
00:03:17,120 --> 00:03:23,850
So we're going to create a new file called app.js and as per usual we're going to initialize our npm.
44
00:03:24,080 --> 00:03:30,980
But this time instead if you don't want to hit enter to insert the default values when you initialize
45
00:03:30,980 --> 00:03:36,380
npm, you can just add a -y which basically says yes to everything.
46
00:03:36,650 --> 00:03:43,260
And when you hit enter you can see that we've initialized our npm and accepted all of the defaults.
47
00:03:43,280 --> 00:03:48,330
So now all we have to do is to install the MongoDB driver.
48
00:03:49,150 --> 00:03:53,490
And to do that with npm we have to install something called mongodb.
49
00:03:53,800 --> 00:03:58,510
And remember we don't need the --save anymore as of the latest versions of npm.
50
00:03:58,720 --> 00:04:04,220
So we can simply say npm i short for install and then it's mongodb.
51
00:04:04,510 --> 00:04:05,470
Hit enter
52
00:04:05,480 --> 00:04:09,150
and that should install the driver in a couple of seconds.
53
00:04:09,730 --> 00:04:17,440
So now all we have to do is open up our app.js inside Atom and get started developing on your Node
54
00:04:17,459 --> 00:04:22,360
JS application that integrates with a MongoDB database.
55
00:04:22,390 --> 00:04:30,130
I'm just going to show you how we can get started using this by just using some the code from the getting
56
00:04:30,130 --> 00:04:31,330
started guide.
57
00:04:31,360 --> 00:04:41,150
So I'm simply going to copy this part and add it to our aappp.js and again we've got a whole bunch
58
00:04:41,150 --> 00:04:45,840
of warnings so let's just silence that from //jshint. And
59
00:04:49,910 --> 00:04:52,770
now I want to walk you through this code. First
60
00:04:52,780 --> 00:04:56,390
we are requiring a package called mongodb
61
00:04:56,710 --> 00:05:01,760
and along with that package we also insert another one called assert.
62
00:05:01,780 --> 00:05:06,040
Now everything that you see that is related to assert be it on
63
00:05:06,070 --> 00:05:10,060
Node.js applications or iOS applications,
64
00:05:10,060 --> 00:05:12,470
it's always to do with testing.
65
00:05:12,820 --> 00:05:19,270
And so you'll see that when we add a lot of the MongoDB code into our application, there's a lot of
66
00:05:19,340 --> 00:05:26,700
assert that just validates our data entry and our connection to the MongoDB database.
67
00:05:26,710 --> 00:05:34,030
Now the next part is the connection URL. And you can see this looks a little bit similar to what
68
00:05:34,030 --> 00:05:38,710
we've been using to develop websites on our local system.
69
00:05:38,710 --> 00:05:44,830
The important thing to note here is that when you're working with MongoDB the port that they use is
70
00:05:45,010 --> 00:05:48,070
pretty much always 27017
71
00:05:48,070 --> 00:05:51,850
and this is just some sort of arbitrary number that they've decided upon.
72
00:05:51,880 --> 00:05:58,400
This is the base URL for connecting to our database. And then we specify a database name
73
00:05:58,420 --> 00:06:07,270
so let's change it to fruitsDB and then we create a new Mongo client which is going to connect to
74
00:06:07,300 --> 00:06:13,640
our MongoDB database and if a fruitsDB doesn't exist then it will create it.
75
00:06:13,810 --> 00:06:20,920
And if all of that happened without any errors then we are going to log that we have connected successfully
76
00:06:20,950 --> 00:06:23,940
to the server. Once we're done
77
00:06:23,970 --> 00:06:26,680
we're going to close the connection to our database
78
00:06:26,910 --> 00:06:34,230
and this is all that this code does so far, the majority of it down here is just to create a new connection
79
00:06:34,530 --> 00:06:36,190
to a new database.
80
00:06:36,270 --> 00:06:43,440
And this is equivalent to when we saw in the Mongos shell previously where we just said use fruits
81
00:06:43,440 --> 00:06:51,570
DB that use fruitsDB if we wanted to use it in our Node.js application using the MongoDB native driver
82
00:06:51,870 --> 00:06:54,700
is basically all of this code.
83
00:06:54,750 --> 00:06:56,320
So it's a bit crazy.
84
00:06:56,400 --> 00:07:03,120
And the reason why I'm walking you through this and explaining the code is that in reality most developers
85
00:07:03,120 --> 00:07:09,040
who are working with Node and MongoDB will rarely use the native MongoDB driver.
86
00:07:09,210 --> 00:07:11,090
Now it's not because it's no good,
87
00:07:11,160 --> 00:07:17,550
it works and allows a lot of personalization and you can drill down to the specifics and you can set
88
00:07:17,550 --> 00:07:22,460
up and use your MongoDB database with a high level of control.
89
00:07:22,980 --> 00:07:30,300
All right so now that we have created this, let's go ahead and run our app.js using again node app
90
00:07:30,300 --> 00:07:38,710
.js and you can see we get a error. And it says MongoNetworkError failed to connect to server.
91
00:07:39,000 --> 00:07:41,950
And whenever you get this, you always have to remind yourself
92
00:07:42,000 --> 00:07:46,250
do you still have the Mongo server up and running?
93
00:07:46,350 --> 00:07:53,610
So create a new tab and remember whenever we're using MongoDB we always have to first run our server
94
00:07:53,910 --> 00:08:01,380
using the command mongod. And only once it's done running and it's waiting for connections on again
95
00:08:01,380 --> 00:08:03,840
that port 27017
96
00:08:03,840 --> 00:08:05,880
it's going to come up in a lot of places.
97
00:08:05,880 --> 00:08:12,450
Well now we're ready to actually connect to our database and we can run node ap.js again
98
00:08:12,600 --> 00:08:16,920
and now we are successfully connected to the server.
99
00:08:17,430 --> 00:08:23,760
If at some point you get a deprecation warning as you see here then just read what the message says
100
00:08:23,790 --> 00:08:26,660
because MongoDB, because it's relatively new,
101
00:08:26,820 --> 00:08:34,750
they will add new syntax and new code and new APIs, new ways of doing things, on a regular basis.
102
00:08:34,770 --> 00:08:40,770
So in this case it says deprecation warning current URL string parser is deprecated and will
103
00:08:40,770 --> 00:08:45,780
be removed in a future version. To use the new parser, pass option
104
00:08:45,780 --> 00:08:48,900
this to the MongoClient.connect.
105
00:08:49,050 --> 00:08:53,300
If you didn't know what to do with this deprecation warning, then what do you do?
106
00:08:53,310 --> 00:09:01,590
Well you just copy it in its entirety and then you paste it into Google and see what does Google say.
107
00:09:01,680 --> 00:09:09,150
So first link is a link to Stack Overflow and it already tells you this is how you would work around
108
00:09:09,150 --> 00:09:09,550
it.
109
00:09:09,690 --> 00:09:15,300
So you can either change to a local version of Mongo which is not what we want to do, we want to work with
110
00:09:15,300 --> 00:09:16,410
the latest version.
111
00:09:16,590 --> 00:09:22,260
So if you do indeed want to use latest version, then you will have to make your connection using this
112
00:09:22,460 --> 00:09:23,030
use
113
00:09:23,070 --> 00:09:25,930
NewUrlParser key value pair.
114
00:09:26,250 --> 00:09:29,670
And here they've got some example code of how you would add it.
115
00:09:29,670 --> 00:09:33,140
So they've added it to MongoClient.connect.
116
00:09:33,150 --> 00:09:38,490
You can see that even though we're taking the code from MongoDB using the latest version of their
117
00:09:38,490 --> 00:09:44,130
documentation stuff gets out of date and it's really important that you don't get fazed by every little
118
00:09:44,130 --> 00:09:48,840
thing that you see in the console and simply just Google for an answer.
119
00:09:49,260 --> 00:09:52,640
Let's go back to Atom and let's go ahead and fix this.
120
00:09:52,650 --> 00:09:59,110
We're going to change our Mongo client to use the URL that we specified for our MongoDB server
121
00:09:59,220 --> 00:10:05,210
but then we're going to add a comma and we're going to paste in that option that they wanted us to add.
122
00:10:05,550 --> 00:10:06,630
So there we go.
123
00:10:06,630 --> 00:10:09,900
Now let's hit save and let's rerun our app.
124
00:10:09,900 --> 00:10:15,680
You can see now we get connected successfully to server and we don't get any deprecation warnings.
125
00:10:16,170 --> 00:10:21,840
Even though the last time we did get this warning our app is still running and connected successfully
126
00:10:21,840 --> 00:10:23,850
so it didn't actually affect our app.
127
00:10:24,030 --> 00:10:29,460
But it's important that whenever you see a deprecation warning to just copy and paste it into Google
128
00:10:29,520 --> 00:10:32,360
and see what the existing solutions are.
129
00:10:32,580 --> 00:10:38,310
It's very very rare that you will be coming across a problem for the first time and you're the only
130
00:10:38,310 --> 00:10:39,520
person with that problem.
131
00:10:39,540 --> 00:10:40,930
It almost never happens.
132
00:10:42,590 --> 00:10:48,800
OK so now that we have it connected successfully to our Mongo server the next part is adding some
133
00:10:48,800 --> 00:10:51,300
data to our database.
134
00:10:51,330 --> 00:10:52,450
So how do we do that?
135
00:10:52,470 --> 00:10:58,960
Well it's back to the documentation and the next part is of course insert a document.
136
00:10:59,010 --> 00:11:06,900
So let's copy all of this code from the documentation and let's paste it below the last line that we
137
00:11:06,900 --> 00:11:07,910
have.
138
00:11:08,010 --> 00:11:14,820
So this code what it does is it will create a new collection and the collection that we're going to
139
00:11:14,820 --> 00:11:17,820
create is going to be called fruits.
140
00:11:17,900 --> 00:11:21,840
We've got a collection called fruits inside our fruitsDB
141
00:11:22,010 --> 00:11:31,560
And this is equivalent to when we used our new database and then we said db.fruits.insert.
142
00:11:31,940 --> 00:11:39,340
And then we get to insert some data in here. The data is in the same format as we saw before.
143
00:11:39,350 --> 00:11:46,810
It's a bunch of key value pairs and here they're inserting three items into a field called a
144
00:11:46,850 --> 00:11:49,480
and then they've added the values 1,2 ,3.
145
00:11:49,550 --> 00:11:55,190
So as we saw before in the Mono shell whenever you see a pair of curly brackets that's going to be
146
00:11:55,220 --> 00:11:58,370
an individual document or an individual record.
147
00:11:58,590 --> 00:12:02,370
And in our case we're going to insert three fruits.
148
00:12:02,540 --> 00:12:09,560
So I'm going to just paste in some code that I wrote a little bit earlier on and we'll just format this
149
00:12:09,560 --> 00:12:11,720
or that you can see it more clearly.
150
00:12:14,320 --> 00:12:21,000
So here I'm inserting three documents and each document is a fruit.
151
00:12:21,070 --> 00:12:24,110
So the first one has a name of apple, a score of 8
152
00:12:24,160 --> 00:12:30,360
and a review of 'great fruit'. And the rest of them are for orange and banana.
153
00:12:30,820 --> 00:12:37,630
So we're now creating this array of fruits and we're using the method insertMany which comes from MongoDB
154
00:12:37,630 --> 00:12:44,620
to insert all of these three documents into a collection called fruits inside a database called
155
00:12:44,620 --> 00:12:45,630
fruitsDB.
156
00:12:48,740 --> 00:12:54,300
And down here you can see that the next few lines are dedicated to validation.
157
00:12:54,320 --> 00:12:57,350
So they've added a whole bunch of asserts.
158
00:12:57,380 --> 00:13:02,570
And if we go through them line by line, this one says validate to make sure that there are no errors
159
00:13:02,600 --> 00:13:05,280
when we inserted our document.
160
00:13:05,720 --> 00:13:11,080
And the next ones ensure that we have three results that are inserted into our collection.
161
00:13:11,330 --> 00:13:20,790
And if that is so then we're going to log inserted three documents into the collection. And the next
162
00:13:20,790 --> 00:13:26,930
part is to simply run that function inside our insert documents function and they show you that client.
163
00:13:27,030 --> 00:13:29,130
connect should now look like this
164
00:13:29,130 --> 00:13:37,290
with this additional part. Up here inside client.connect instead of calling client.close we're
165
00:13:37,290 --> 00:13:44,060
going to paste that new code which calls insertDocuments and only once it's done inserting the documents
166
00:13:44,070 --> 00:13:48,550
do we close the connection to our database.
167
00:13:48,560 --> 00:13:56,390
So now let's hit save and let's again run our code with node app.js and you can see we've successfully
168
00:13:56,390 --> 00:14:01,890
connected to the server and we've inserted three documents into the collection.
169
00:14:02,210 --> 00:14:08,210
And you can actually test out the validation quite easily. Say if we were only to add 2 records to
170
00:14:08,240 --> 00:14:13,890
our database, then you will get an assertion error saying that 3 doesn't equal 2.
171
00:14:13,910 --> 00:14:18,660
Well you only inserted 2 items but I was expecting 3.
172
00:14:18,770 --> 00:14:25,040
So you're ready beginning to see the validation that we can place inside our app.js using the Mongo
173
00:14:25,040 --> 00:14:29,300
DB driver in order to validate the data that we're inserting.
174
00:14:29,420 --> 00:14:37,870
And you can see just how very flexible all of these asserts are. If I head into my command line and I
175
00:14:37,870 --> 00:14:47,830
create a new terminal and then I tap into the Mongo shell and I say show dbs, you can see now in
176
00:14:47,830 --> 00:14:53,710
addition to our shopDB which we created inside the Mongo shell we've also got this new database
177
00:14:53,710 --> 00:15:00,340
called fruitsDB and that one was not created using the Mongo shell but instead from Node.js
178
00:15:00,670 --> 00:15:02,740
using the MongoDB driver.
179
00:15:02,950 --> 00:15:05,600
And that's where the fruitsDB got created.
180
00:15:08,180 --> 00:15:18,410
And now if I say use fruitsDB then we can say show collections inside this db
181
00:15:18,430 --> 00:15:23,680
so we have this collection called fruits and that of course comes from this part
182
00:15:23,680 --> 00:15:30,100
when we created our new collection using the db.collection method. And then we inserted a whole
183
00:15:30,100 --> 00:15:30,770
bunch of data
184
00:15:30,790 --> 00:15:36,620
if you're a member so we should be able to say db.fruits.find.
185
00:15:36,790 --> 00:15:43,070
And we're going to leave the parentheses empty to show us all the data that we currently have. The keen
186
00:15:43,160 --> 00:15:50,460
eyed amongst you will spot that we have 5 records instead of what you might expect to be 3 because
187
00:15:50,460 --> 00:15:56,430
the first time we added apple, orange, banana and the second time we deleted the banana record and we
188
00:15:56,430 --> 00:15:58,590
got an assertion failure.
189
00:15:58,650 --> 00:16:03,710
Now assertion is quite a complex topic but in this case this is a nonfatal assertion.
190
00:16:03,720 --> 00:16:10,770
So one actually prevent the insertion of these records but it simply alerts you to the fact that the
191
00:16:10,770 --> 00:16:13,910
assertion has failed.
192
00:16:14,010 --> 00:16:17,200
So the next step is how do we get our app.
193
00:16:17,280 --> 00:16:25,500
js to find all of these records? How do we read our data inside our Node.js app?
194
00:16:25,500 --> 00:16:27,970
Well it's only a short scroll away.
195
00:16:28,020 --> 00:16:34,150
So the next part is find all documents and let's just go ahead and add this into our code
196
00:16:35,410 --> 00:16:40,780
right at the bottom again and this section we have to specify the collection where we want to find something
197
00:16:40,780 --> 00:16:44,320
from which if you remember earlier on was called fruits,
198
00:16:44,340 --> 00:16:50,470
so let's change that to fruits. And then it's going to look through the collection and it's going to
199
00:16:50,470 --> 00:16:51,830
find all.
200
00:16:51,940 --> 00:16:54,490
And then it's going to save it into an array
201
00:16:54,670 --> 00:17:01,300
and for that array we need to have some fruits. And in the callback
202
00:17:01,330 --> 00:17:08,589
we're going to get back the object that we got from the find function and we're going to log those fruits
203
00:17:08,710 --> 00:17:10,140
into the console.
204
00:17:12,690 --> 00:17:21,020
Now if we hit save and call that find function inside again the client.connect,
205
00:17:21,270 --> 00:17:24,240
in this case we're not going to insert any more documents.
206
00:17:24,240 --> 00:17:26,780
We're simply just going to find our documents.
207
00:17:26,819 --> 00:17:31,500
So I'm just going to copy that part of the code and we're going to update this method
208
00:17:31,500 --> 00:17:40,040
client.connect to delete the insertion method call and just find those records inside our database.
209
00:17:40,350 --> 00:17:45,280
Let's head back to our terminal connection where we've got our prompt and let's call node app.
210
00:17:45,290 --> 00:17:46,390
js again.
211
00:17:46,620 --> 00:17:54,900
So now you can see that we've found the following records and this printed in here is an array of Javascript
212
00:17:54,960 --> 00:18:01,710
objects and you can see it looks very similar to what we've got in the Mongo shell but what's logged
213
00:18:01,710 --> 00:18:04,850
here are actually the documents from our MongoDB
214
00:18:05,070 --> 00:18:10,120
but here we've actually got our Javascript objects.
215
00:18:10,310 --> 00:18:17,810
So if we now have access to these living Javascript objects inside an array in our app.js then we
216
00:18:17,810 --> 00:18:23,790
can use our Javascript code and Node.js to do whatever it is that we wish with it.
217
00:18:24,200 --> 00:18:31,670
As you can see this code is very very wordy and there's a lot of it that's just boilerplate code that
218
00:18:31,670 --> 00:18:36,430
you have to add every single time you use the native MongoDB driver.
219
00:18:36,590 --> 00:18:42,300
And for some people especially if you want to develop applications quickly it can be a bit of a pain.
220
00:18:42,320 --> 00:18:49,130
So in the coming modules I want to show you what most Node developers will work with which is a module called
221
00:18:49,490 --> 00:18:56,090
mongoose and it will vastly simplify the code that we have here and we will walk through how to use
222
00:18:56,090 --> 00:19:02,180
mongoose to make your life developing Mongo and node apps so much easier.
223
00:19:02,270 --> 00:19:03,210
So I'll see you there.
24263
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.