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:04,160
Querying for data in a database is one
2
00:00:04,160 --> 00:00:08,320
of the most important operations that we have in databases.
3
00:00:08,320 --> 00:00:11,820
And so, let's now take a look at a couple of query operators
4
00:00:11,820 --> 00:00:14,770
in MongoDB, starting with some simple ones
5
00:00:14,770 --> 00:00:17,993
and then moving on to some really complex queries.
6
00:00:19,610 --> 00:00:23,010
And, to start, let's give ourselves some space here.
7
00:00:23,010 --> 00:00:25,760
And so, you already know, the easiest way
8
00:00:25,760 --> 00:00:28,480
to basically query for all the documents
9
00:00:28,480 --> 00:00:31,470
in a certain collection is to just use find
10
00:00:31,470 --> 00:00:33,560
without passing anything in there.
11
00:00:33,560 --> 00:00:36,130
So, that's what we've been doing until this point.
12
00:00:36,130 --> 00:00:38,570
And so, it gives us simply this result
13
00:00:38,570 --> 00:00:40,040
with all the documents
14
00:00:40,040 --> 00:00:42,110
that are in a certain collection basically
15
00:00:42,110 --> 00:00:44,620
without any searching criteria.
16
00:00:44,620 --> 00:00:47,910
But, now, let's say that we actually only want one tour
17
00:00:47,910 --> 00:00:49,540
and we already know its name.
18
00:00:49,540 --> 00:00:51,610
And so, we can search for that tour
19
00:00:51,610 --> 00:00:54,120
using the name that we know.
20
00:00:54,120 --> 00:00:57,910
And so, we us db.tours
21
00:00:59,150 --> 00:01:00,400
and, again, find.
22
00:01:00,400 --> 00:01:03,573
But, this time, we're gonna pass in a filter object.
23
00:01:04,930 --> 00:01:06,710
So, again, we need an object here.
24
00:01:06,710 --> 00:01:09,580
And so, you start to see now that in MongoDB,
25
00:01:09,580 --> 00:01:12,560
really everything works with objects.
26
00:01:12,560 --> 00:01:15,330
And, this will be even more prominent a bit later
27
00:01:15,330 --> 00:01:16,163
in this lecture.
28
00:01:17,265 --> 00:01:20,790
So, inside this object, we pass in the filter.
29
00:01:20,790 --> 00:01:22,650
So, basically the search criteria
30
00:01:22,650 --> 00:01:25,050
that we want to search for.
31
00:01:25,050 --> 00:01:28,343
So, we simply set the name to the tour name
32
00:01:28,343 --> 00:01:30,570
that we want to search for.
33
00:01:30,570 --> 00:01:32,120
So, let's say The Forest Hiker.
34
00:01:35,040 --> 00:01:36,330
And, that's actually it.
35
00:01:36,330 --> 00:01:39,750
So, that is our search criteria or the search filter.
36
00:01:39,750 --> 00:01:41,260
And, if we had returned now,
37
00:01:41,260 --> 00:01:43,580
then we only get this one tour
38
00:01:43,580 --> 00:01:47,553
where the name matches exactly the one that we passed in.
39
00:01:48,970 --> 00:01:51,830
And, we could do, of course, the same for anything else.
40
00:01:51,830 --> 00:01:53,760
For example, for the difficulty,
41
00:01:53,760 --> 00:01:57,800
we could search for tours
42
00:01:57,800 --> 00:01:59,593
that have an easy in difficulty.
43
00:02:01,890 --> 00:02:06,343
So, difficulty and easy.
44
00:02:07,640 --> 00:02:10,030
Close the object, close the function.
45
00:02:10,030 --> 00:02:13,910
And so, we get all the tours where the difficulty is easy.
46
00:02:13,910 --> 00:02:16,420
Right now, there is only one tour,
47
00:02:16,420 --> 00:02:19,010
but if we had multiple tours with difficulty set
48
00:02:19,010 --> 00:02:20,260
to easy, then, of course,
49
00:02:20,260 --> 00:02:23,020
it would return all of these documents.
50
00:02:23,020 --> 00:02:25,150
So, that is the easiest way
51
00:02:25,150 --> 00:02:27,400
that we can search for documents.
52
00:02:27,400 --> 00:02:29,610
Now, let's take it to the next level
53
00:02:29,610 --> 00:02:32,063
by using some special query operators.
54
00:02:33,100 --> 00:02:36,070
And, what I want to do is to search for tours
55
00:02:36,070 --> 00:02:38,673
which have a price below 500.
56
00:02:40,470 --> 00:02:43,670
And, the way it works is like this.
57
00:02:43,670 --> 00:02:48,670
So, we always use db. The collection name .find.
58
00:02:49,170 --> 00:02:51,670
And then, again, or filter object.
59
00:02:51,670 --> 00:02:54,620
And so, remember, I want to search for prices,
60
00:02:54,620 --> 00:02:56,430
so I say price.
61
00:02:56,430 --> 00:03:00,550
And now, I want all the tours with a price below 500.
62
00:03:00,550 --> 00:03:02,090
So, how do I do that?
63
00:03:02,090 --> 00:03:05,000
Well, I need to use the less than operator
64
00:03:05,000 --> 00:03:06,630
and it works like this.
65
00:03:06,630 --> 00:03:09,080
We need to define yet a new object
66
00:03:09,080 --> 00:03:13,017
where we set the lte property to 500,
67
00:03:15,090 --> 00:03:16,550
then close that object,
68
00:03:16,550 --> 00:03:19,320
and then close that first price object
69
00:03:19,320 --> 00:03:21,410
and then close the function.
70
00:03:21,410 --> 00:03:23,950
So, that looks very weird, I know,
71
00:03:23,950 --> 00:03:27,130
but this is how we use query operators in MongoDB.
72
00:03:27,130 --> 00:03:30,200
So, again, lte stands for less than
73
00:03:30,200 --> 00:03:32,070
because that is what we're searching for.
74
00:03:32,070 --> 00:03:36,140
Where the price is less than 500.
75
00:03:36,140 --> 00:03:38,820
And, this special sign here is reserved in MongoDB
76
00:03:38,820 --> 00:03:40,490
for its operators.
77
00:03:40,490 --> 00:03:43,520
So, whenever you see this dollar sign here in MongoDB,
78
00:03:43,520 --> 00:03:45,933
you know that it's a Mongo operator.
79
00:03:46,900 --> 00:03:48,690
So, the weirdest part here is probably
80
00:03:48,690 --> 00:03:51,430
that we have to do it inside a new object,
81
00:03:51,430 --> 00:03:54,600
but if you think about it, it's actually really the only way
82
00:03:54,600 --> 00:03:58,430
to specify that the price should not simply be 500,
83
00:03:58,430 --> 00:03:59,530
but something else.
84
00:03:59,530 --> 00:04:03,320
So, we have to set the price to something else than 500.
85
00:04:03,320 --> 00:04:04,760
And, the best way really is
86
00:04:04,760 --> 00:04:06,870
to just use another object in there.
87
00:04:06,870 --> 00:04:09,453
So, that's exactly how MongoDB then works.
88
00:04:10,479 --> 00:04:13,280
So, let's try this out now, hit return.
89
00:04:13,280 --> 00:04:15,600
And, indeed, we get our two documents
90
00:04:15,600 --> 00:04:20,500
where the price property is below 500.
91
00:04:20,500 --> 00:04:23,530
Great, next up, let's actually search
92
00:04:23,530 --> 00:04:26,840
for two search criteria at the same time.
93
00:04:26,840 --> 00:04:29,690
So, what I want to do next is to search for documents
94
00:04:29,690 --> 00:04:32,910
which have the price less or equal than 500,
95
00:04:32,910 --> 00:04:34,760
which is what we had here already,
96
00:04:34,760 --> 00:04:37,910
but also, at the same time, the rating greater
97
00:04:37,910 --> 00:04:39,903
or equal to 4.8.
98
00:04:41,800 --> 00:04:46,040
And so, that should then give us only this tour here.
99
00:04:46,040 --> 00:04:47,240
So, only this one
100
00:04:47,240 --> 00:04:50,590
because this is the only one which has the price below 500
101
00:04:50,590 --> 00:04:55,140
and the rating equal or greater to 4.8.
102
00:04:55,140 --> 00:04:57,780
So, it's 4.8 and so that one is the one
103
00:04:57,780 --> 00:05:00,150
that should match our query.
104
00:05:00,150 --> 00:05:03,620
So, let's clear it to take away some of the confusion.
105
00:05:03,620 --> 00:05:05,670
Now, I want this result here
106
00:05:05,670 --> 00:05:08,550
so that we can compare it with the next result.
107
00:05:08,550 --> 00:05:11,833
And so, let's now write out the query that I just described.
108
00:05:13,710 --> 00:05:17,260
So, find and, again, this one here is
109
00:05:17,260 --> 00:05:18,590
gonna be just the same.
110
00:05:18,590 --> 00:05:22,690
So, we want the price to be less or equal than 500.
111
00:05:22,690 --> 00:05:27,093
Or, we could actually simply say less than 500.
112
00:05:28,630 --> 00:05:33,630
So, lte is less than or equal and lt is simply less than.
113
00:05:35,690 --> 00:05:39,030
So, this is the first part, the price less than 500.
114
00:05:39,030 --> 00:05:41,420
And, at the same time, we want the rating
115
00:05:41,420 --> 00:05:43,003
to be greater or equal to 4.8.
116
00:05:43,970 --> 00:05:44,980
And, that's easy.
117
00:05:44,980 --> 00:05:47,900
All we have to do is to specify a second field
118
00:05:47,900 --> 00:05:49,350
in our filter object.
119
00:05:49,350 --> 00:05:51,823
So, first, the price and now the rating.
120
00:05:53,330 --> 00:05:55,150
So, we want the rating to be
121
00:05:56,340 --> 00:05:57,840
and you can probably guess it,
122
00:05:58,880 --> 00:06:03,203
greater than or equal 4.8.
123
00:06:05,080 --> 00:06:09,420
Now, close this filter object and close the function.
124
00:06:09,420 --> 00:06:11,040
So, let's test it out.
125
00:06:11,040 --> 00:06:14,360
And, indeed, it gives us the result that we were expecting.
126
00:06:14,360 --> 00:06:18,520
So, the only document where both the search criteria here
127
00:06:18,520 --> 00:06:20,840
are true at the same time.
128
00:06:20,840 --> 00:06:23,310
So, just to recap, when we want to search
129
00:06:23,310 --> 00:06:25,670
for two criteria at the same time,
130
00:06:25,670 --> 00:06:28,540
which basically is an and query,
131
00:06:28,540 --> 00:06:31,950
so price less than 500, and rating greater
132
00:06:31,950 --> 00:06:32,953
or equal to 4.8.
133
00:06:34,070 --> 00:06:36,000
Well, the only thing that we have to do is
134
00:06:36,000 --> 00:06:39,080
to specify two fields in the filter object.
135
00:06:39,080 --> 00:06:41,600
And, I know this looks quite confusing.
136
00:06:41,600 --> 00:06:45,760
I felt exactly the same when I was learning this stuff,
137
00:06:45,760 --> 00:06:47,800
but I hope that you can still follow me
138
00:06:48,870 --> 00:06:53,790
so that we can now actually take it even one level further.
139
00:06:53,790 --> 00:06:56,940
So, here, we did an and query.
140
00:06:56,940 --> 00:07:00,100
So, querying for documents where these two conditions
141
00:07:00,100 --> 00:07:03,820
are both true, but now let's do an or query.
142
00:07:03,820 --> 00:07:06,470
So, basically searching for all the documents
143
00:07:06,470 --> 00:07:09,070
where either this part here is true
144
00:07:09,070 --> 00:07:11,103
or this part is true.
145
00:07:13,350 --> 00:07:18,090
So, db.tours.find
146
00:07:18,090 --> 00:07:20,050
and let's close it here already
147
00:07:20,050 --> 00:07:22,653
because this is gonna be an even more confusing one.
148
00:07:26,000 --> 00:07:29,410
So, we want to do an or query and the way it works
149
00:07:29,410 --> 00:07:32,530
with MongoDB operators is like this.
150
00:07:32,530 --> 00:07:37,530
We say or and then here, we specify an array.
151
00:07:38,949 --> 00:07:42,520
And, in this array, we will then put the two conditions
152
00:07:42,520 --> 00:07:45,003
where we want one of them to be true.
153
00:07:46,714 --> 00:07:48,710
So, again, I know this looks confusing,
154
00:07:48,710 --> 00:07:52,310
but let's write it out now and I will then explain it again
155
00:07:52,310 --> 00:07:53,863
when we're already doing that.
156
00:07:55,580 --> 00:07:59,220
So, the first condition is the price should
157
00:07:59,220 --> 00:08:02,653
be less than 500.
158
00:08:03,730 --> 00:08:05,823
So, basically the same as before.
159
00:08:06,670 --> 00:08:08,623
So, that is the first object.
160
00:08:09,600 --> 00:08:12,130
So, all of this, so the first condition,
161
00:08:12,130 --> 00:08:14,040
basically the first filter,
162
00:08:14,040 --> 00:08:15,240
and then the second one.
163
00:08:16,990 --> 00:08:20,750
So, the rating should be, just like before,
164
00:08:20,750 --> 00:08:25,750
greater or equal than 4.8.
165
00:08:26,250 --> 00:08:28,513
Close this one and close this one.
166
00:08:29,630 --> 00:08:31,800
And so, that's actually already it.
167
00:08:31,800 --> 00:08:36,549
So, again, to recap here, we start with the or operator
168
00:08:36,549 --> 00:08:40,030
and the or operator accepts an array of conditions.
169
00:08:40,030 --> 00:08:43,150
So, that's why we then create this array here
170
00:08:43,150 --> 00:08:45,610
and this array will then contain one object
171
00:08:45,610 --> 00:08:48,470
for each of our filters basically.
172
00:08:48,470 --> 00:08:51,650
So, we want either this one to be true
173
00:08:51,650 --> 00:08:53,143
or this one.
174
00:08:55,920 --> 00:09:00,130
So, let's try to see what our results are gonna be.
175
00:09:00,130 --> 00:09:04,120
And so, actually we get all of the three tours.
176
00:09:04,120 --> 00:09:06,357
And so, let's analyze why that is.
177
00:09:06,357 --> 00:09:09,913
So, the first one has a price less than 500.
178
00:09:11,260 --> 00:09:13,470
And so, that's why it got included here.
179
00:09:13,470 --> 00:09:16,820
It doesn't have the rating greater or equal to 4.8,
180
00:09:16,820 --> 00:09:20,940
so it's just 4.7, but since we're doing an or query here,
181
00:09:20,940 --> 00:09:23,730
only one of the conditions needs to be true.
182
00:09:23,730 --> 00:09:26,250
And so, that's why this document here got selected
183
00:09:26,250 --> 00:09:28,180
and is included in our output.
184
00:09:28,180 --> 00:09:32,940
Next up, this one also has the price less or equal than 500
185
00:09:32,940 --> 00:09:35,800
and also, at the same time, it has the rating great
186
00:09:35,800 --> 00:09:37,810
or equal than 4.8.
187
00:09:37,810 --> 00:09:39,940
And so, it got included actually
188
00:09:39,940 --> 00:09:41,623
for both of them being true.
189
00:09:43,530 --> 00:09:47,980
Then, the last one does not have the price less than 500,
190
00:09:47,980 --> 00:09:52,123
but it does have the rating greater or equal to 4.8.
191
00:09:53,210 --> 00:09:56,210
And so, again, one of the two conditions is true
192
00:09:56,210 --> 00:09:58,830
and since we're doing an or query,
193
00:09:58,830 --> 00:10:00,483
this tour also got included.
194
00:10:02,020 --> 00:10:04,080
So, let's clear this and only one more,
195
00:10:04,080 --> 00:10:06,170
which is gonna be kind of the same.
196
00:10:06,170 --> 00:10:11,080
I'm simply gonna change from less than to greater than.
197
00:10:11,080 --> 00:10:12,630
And, what I want you to do now is
198
00:10:12,630 --> 00:10:14,910
to guess the output of this one based
199
00:10:14,910 --> 00:10:16,420
on the previous result.
200
00:10:16,420 --> 00:10:18,820
So, can you guess what the result will be?
201
00:10:18,820 --> 00:10:20,770
So, let's take a look.
202
00:10:20,770 --> 00:10:24,490
And so, now, indeed, we no longer have all three tours,
203
00:10:24,490 --> 00:10:26,750
but only the second and the third one
204
00:10:26,750 --> 00:10:28,510
because, remember, the first tour
205
00:10:28,510 --> 00:10:30,760
had the price less than 500
206
00:10:30,760 --> 00:10:32,460
and also the rating less than 4.8.
207
00:10:33,350 --> 00:10:35,820
And so, none of the conditions were applying
208
00:10:35,820 --> 00:10:37,700
and so it's no longer included.
209
00:10:37,700 --> 00:10:39,490
Only the second and the third one,
210
00:10:39,490 --> 00:10:43,480
which now has the price also not greater than 500,
211
00:10:43,480 --> 00:10:45,600
but it has the rating of 4.8
212
00:10:45,600 --> 00:10:47,510
and so it's still included.
213
00:10:47,510 --> 00:10:50,090
And, the last one, of course, has everything true
214
00:10:50,090 --> 00:10:52,310
and so, of course, it's also here.
215
00:10:52,310 --> 00:10:54,980
Just one more thing that I wanted to show you here is
216
00:10:54,980 --> 00:10:58,290
that besides our filter object, so this one,
217
00:10:58,290 --> 00:11:01,600
we can also pass in an object for projection.
218
00:11:01,600 --> 00:11:04,610
So, what projection means is that we simply want
219
00:11:04,610 --> 00:11:07,650
to select some of the fields in the output.
220
00:11:07,650 --> 00:11:10,310
So, let me show it to you and it's very simple.
221
00:11:10,310 --> 00:11:15,310
All we have to do is, for example, say name equals to one.
222
00:11:15,510 --> 00:11:18,570
So, what this means is that we only want the name
223
00:11:18,570 --> 00:11:22,670
to be in the output and so that's why we set name to one.
224
00:11:22,670 --> 00:11:25,520
All the others are not gonna appear in this case.
225
00:11:25,520 --> 00:11:26,780
So, let me show that to you.
226
00:11:26,780 --> 00:11:28,770
And, indeed, we only have the name
227
00:11:28,770 --> 00:11:30,870
and no longer all these other properties.
228
00:11:30,870 --> 00:11:33,913
And, this can be very useful in some cases.
229
00:11:35,130 --> 00:11:37,610
The idea is, of course, also showing up,
230
00:11:37,610 --> 00:11:38,880
but that's always there.
231
00:11:38,880 --> 00:11:41,300
There's no way of removing that.
232
00:11:41,300 --> 00:11:42,780
Okay, cool.
233
00:11:42,780 --> 00:11:46,460
So, I think the main goal of this lecture is now achieved,
234
00:11:46,460 --> 00:11:48,450
which was basically to get you familiar
235
00:11:48,450 --> 00:11:51,200
with the way we query in MongoDB
236
00:11:51,200 --> 00:11:55,570
and also show you these complex MongoDB operators
237
00:11:55,570 --> 00:11:57,090
that we have here.
238
00:11:57,090 --> 00:11:58,590
For some reason, I cannot select it,
239
00:11:58,590 --> 00:11:59,970
but you know what I mean.
240
00:11:59,970 --> 00:12:01,540
So, we have greater than,
241
00:12:01,540 --> 00:12:04,050
we have or, and we really have a ton
242
00:12:04,050 --> 00:12:05,540
of other operators still.
243
00:12:05,540 --> 00:12:07,360
So, this is only the surface,
244
00:12:07,360 --> 00:12:09,960
but throughout the rest of the course, you will, of course,
245
00:12:09,960 --> 00:12:12,990
get to know a couple of other operators.
246
00:12:12,990 --> 00:12:15,260
So, this is just to get you familiar,
247
00:12:15,260 --> 00:12:18,250
get you started with querying in MongoDB.
248
00:12:18,250 --> 00:12:21,093
And, I think in this lecture, we did that successfully.
19384
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.