Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:00,940 --> 00:00:02,719
So we learned about Document
2
00:00:02,719 --> 00:00:05,860
and query middleware, and now the last middleware
3
00:00:05,860 --> 00:00:09,033
that we're gonna talk about is aggregation middleware,
4
00:00:10,560 --> 00:00:12,253
and as you can probably guess,
5
00:00:13,168 --> 00:00:14,930
aggregation middleware allows us to add hooks
6
00:00:14,930 --> 00:00:18,350
before or after an aggregation happens,
7
00:00:18,350 --> 00:00:19,970
and so let's now actually continue with
8
00:00:19,970 --> 00:00:23,830
our previous example where we did hide the secret tours
9
00:00:23,830 --> 00:00:27,540
from the queries, now in an aggregation the secret tours
10
00:00:27,540 --> 00:00:30,270
are still being used, right?
11
00:00:30,270 --> 00:00:32,220
So let's quickly confirm that actually,
12
00:00:33,840 --> 00:00:37,290
for example here in our gets tour stats,
13
00:00:37,290 --> 00:00:39,940
so that's where we used the first aggregation
14
00:00:39,940 --> 00:00:42,700
and so you see we have four tours here,
15
00:00:42,700 --> 00:00:45,500
four in easy, and three in medium
16
00:00:45,500 --> 00:00:49,060
and so that makes 11 but we already know
17
00:00:49,060 --> 00:00:52,480
that we actually only want 10 tours.
18
00:00:52,480 --> 00:00:55,380
So there are 10 tours that are not secret,
19
00:00:55,380 --> 00:00:58,900
and one that is secret, and so now we get all these
20
00:00:58,900 --> 00:01:01,880
11 tours here and so basically we also want
21
00:01:01,880 --> 00:01:05,000
to exclude the secret tour in the aggregation.
22
00:01:05,000 --> 00:01:06,373
So how could we do that?
23
00:01:07,430 --> 00:01:09,680
Well let's take a look at where our aggregation
24
00:01:09,680 --> 00:01:14,680
is actually happening so it's down here in yeah,
25
00:01:14,900 --> 00:01:19,270
so in get tour steps, and so what we could do is to here
26
00:01:19,270 --> 00:01:22,640
in this match state simply exclude the secret tours
27
00:01:22,640 --> 00:01:24,520
that are true right?
28
00:01:24,520 --> 00:01:26,740
So that would be quite easy to add here,
29
00:01:26,740 --> 00:01:29,080
but then we would have to add the same thing
30
00:01:29,080 --> 00:01:32,080
down here in the other aggregation that we have,
31
00:01:32,080 --> 00:01:34,680
and if we had even more aggregations we would then
32
00:01:34,680 --> 00:01:37,860
have to add that in all of them and that's of course
33
00:01:37,860 --> 00:01:40,560
not a good idea, because for example we could forget
34
00:01:40,560 --> 00:01:44,010
to do it and it's also just repetitive code
35
00:01:44,010 --> 00:01:48,820
and so let's simply exclude it right at the model level,
36
00:01:48,820 --> 00:01:53,280
alright so let's add aggregation middleware here
37
00:01:54,470 --> 00:01:55,893
starting with a comment.
38
00:01:59,450 --> 00:02:03,970
So aggregation middleware and so just like before
39
00:02:05,070 --> 00:02:10,039
we have tourSchema.pre so we want this to happen before
40
00:02:10,039 --> 00:02:12,110
the aggregation is actually executed
41
00:02:13,060 --> 00:02:16,573
and so here we use the aggregate hook.
42
00:02:18,230 --> 00:02:22,047
Alright and then our function which again accepts
43
00:02:22,047 --> 00:02:26,332
the next function so calling the next middleware.
44
00:02:26,332 --> 00:02:31,332
Alright, so let's start by taking a look
45
00:02:32,530 --> 00:02:37,113
at this, so remember that up here in query middleware
46
00:02:37,113 --> 00:02:40,283
that this object points to the current query.
47
00:02:41,130 --> 00:02:44,590
Then here in document middleware the this object
48
00:02:44,590 --> 00:02:46,850
points to the current document,
49
00:02:46,850 --> 00:02:50,330
and so down here in aggregation middleware
50
00:02:50,330 --> 00:02:53,880
this is going to point to the current aggregation object.
51
00:02:53,880 --> 00:02:56,764
Okay and so let's take a look at that in the console
52
00:02:56,764 --> 00:03:00,113
but before that let me just remove this log here.
53
00:03:01,590 --> 00:03:05,890
Alright give it a save, run this aggregation here
54
00:03:08,520 --> 00:03:12,520
and that's taking a lot of time and so let's cancel it
55
00:03:13,750 --> 00:03:16,580
and go back and that's probably because
56
00:03:16,580 --> 00:03:21,460
we're not calling next here, and so like we already know
57
00:03:21,460 --> 00:03:23,580
we get stuck in the middleware function
58
00:03:23,580 --> 00:03:26,340
and so that's not good.
59
00:03:26,340 --> 00:03:29,063
So let's try that again now send,
60
00:03:30,120 --> 00:03:33,490
and yeah so now we're back and now let's take a look
61
00:03:33,490 --> 00:03:35,470
at the aggregation object.
62
00:03:35,470 --> 00:03:37,700
Okay so there's a lot of stuff in here
63
00:03:39,980 --> 00:03:43,800
so it's not really interesting here
64
00:03:44,950 --> 00:03:48,330
and I cannot really find what I'm trying to show you here
65
00:03:48,330 --> 00:03:53,330
and so let's simply add this.pipeline okay because what
66
00:03:53,450 --> 00:03:57,140
I really wanted to show you is just the pipeline object.
67
00:03:57,140 --> 00:04:00,620
Okay, and actually it's pipeline like this
68
00:04:00,620 --> 00:04:03,053
so it's actually a function, a method.
69
00:04:04,970 --> 00:04:06,593
So let's clear the console here.
70
00:04:07,820 --> 00:04:12,820
Try this again, and so here we get the aggregation pipeline,
71
00:04:14,350 --> 00:04:17,620
and so that's simply the array that we passed into
72
00:04:17,620 --> 00:04:19,769
the aggregate function before.
73
00:04:19,769 --> 00:04:23,040
Right, so let's take a look and so here we have
74
00:04:23,040 --> 00:04:26,400
that array, this one not this one.
75
00:04:26,400 --> 00:04:28,200
So we have the match to group
76
00:04:28,200 --> 00:04:30,910
and then the sort so if we take a look here
77
00:04:30,910 --> 00:04:34,470
at the console we have indeed our match with the ratings
78
00:04:34,470 --> 00:04:37,320
average we have group and then sort.
79
00:04:37,320 --> 00:04:41,020
So that is exactly the pipeline we specified before,
80
00:04:41,020 --> 00:04:44,570
and so now in order to filter out the secret tours
81
00:04:44,570 --> 00:04:47,970
all we have to do is to add another match stage
82
00:04:47,970 --> 00:04:50,700
right at the beginning of this pipeline array,
83
00:04:50,700 --> 00:04:53,713
right and so let's do just that.
84
00:04:55,029 --> 00:04:58,040
So let's do that here before this log,
85
00:04:58,040 --> 00:05:03,040
so this.pipeline and remember that this is an array
86
00:05:03,890 --> 00:05:06,130
and how do we add an element at the beginning
87
00:05:06,130 --> 00:05:06,963
of an array?
88
00:05:08,262 --> 00:05:11,510
We use unshift and so that is a standard JavaScript
89
00:05:11,510 --> 00:05:15,340
method for arrays okay, we have also shift to add
90
00:05:15,340 --> 00:05:18,470
at the end of the array and unshift at the beginning
91
00:05:18,470 --> 00:05:21,690
of the array, and so again what we want to add here now
92
00:05:21,690 --> 00:05:25,490
is to add just another stage, so very similar
93
00:05:25,490 --> 00:05:26,803
to what we have down here.
94
00:05:29,690 --> 00:05:34,690
So match and then secretTour, not equal to true.
95
00:05:40,460 --> 00:05:45,340
Give it a save, and so this piece of code here basically
96
00:05:45,340 --> 00:05:48,330
is exactly what we have up here right?
97
00:05:48,330 --> 00:05:51,220
Basically removing from the output all the documents
98
00:05:51,220 --> 00:05:55,260
that have secretTour set to true, right?
99
00:05:55,260 --> 00:06:00,160
So if you give it a save now, then let's check this out,
100
00:06:00,160 --> 00:06:03,250
and remember we have now 11 tours, four, four,
101
00:06:03,250 --> 00:06:06,780
and three so let's check the result afterwards
102
00:06:06,780 --> 00:06:10,340
and so now indeed one of the difficult yours is gone
103
00:06:10,340 --> 00:06:13,460
so we only now have three difficult tours meaning
104
00:06:13,460 --> 00:06:15,930
that we are back to just having 10.
105
00:06:15,930 --> 00:06:20,260
Okay and actually we can confirm that our super secret tour
106
00:06:20,260 --> 00:06:24,630
was a difficult tour, alright and so that is now gone
107
00:06:24,630 --> 00:06:27,700
and so our results are now only about the regular
108
00:06:27,700 --> 00:06:30,800
non-secret tours alright?
109
00:06:30,800 --> 00:06:34,670
And we can again take a look at our aggregation pipeline now
110
00:06:34,670 --> 00:06:38,640
and here you see that now we have these two matched stages.
111
00:06:38,640 --> 00:06:41,150
Great and as I mentioned before it's no problem
112
00:06:41,150 --> 00:06:45,050
to repeat these stages, we can have as many match stages
113
00:06:45,050 --> 00:06:49,920
as we want, okay and that's it for aggregation middleware.
114
00:06:49,920 --> 00:06:53,740
I'm not gonna include any post code here for middleware
115
00:06:53,740 --> 00:06:56,290
that's not really necessary alright,
116
00:06:56,290 --> 00:06:59,050
and I'm also not gonna talk about model middleware here
117
00:06:59,050 --> 00:07:01,570
because it's really not that important.
118
00:07:01,570 --> 00:07:04,750
Alright, so middleware is some really cool
119
00:07:04,750 --> 00:07:08,180
and important stuff that we can add to our models,
120
00:07:08,180 --> 00:07:10,560
and there is indeed other cool stuff
121
00:07:10,560 --> 00:07:13,430
that we can do with models, for example implementing
122
00:07:13,430 --> 00:07:16,690
instance methods which are methods that will be available
123
00:07:16,690 --> 00:07:19,220
on ever document after being queried,
124
00:07:19,220 --> 00:07:21,410
and that again can be quite handy,
125
00:07:21,410 --> 00:07:23,402
and we will do that later
126
00:07:23,402 --> 00:07:25,570
in the authentication section as well okay.
127
00:07:25,570 --> 00:07:27,940
So I'm gonna leave that for a bit later,
128
00:07:27,940 --> 00:07:30,110
now what we are gonna do in this section
129
00:07:30,110 --> 00:07:34,170
just to finish is to actually add some validation, alright
130
00:07:34,170 --> 00:07:37,070
and so in the next two videos we're gonna talk about that.
10866
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.