Would you like to inspect the original subtitles? These are the user uploaded subtitles that are being translated:
1
00:00:01,170 --> 00:00:02,830
So we embedded users
2
00:00:02,830 --> 00:00:05,060
into tours in the last video,
3
00:00:05,060 --> 00:00:06,870
and also talked about the drawbacks
4
00:00:06,870 --> 00:00:10,010
of that approach in our specific situation.
5
00:00:10,010 --> 00:00:13,010
And so in this video let's actually connect tours
6
00:00:13,010 --> 00:00:17,443
and users not by embedding but instead by a reference.
7
00:00:19,050 --> 00:00:19,883
And so to start, let's actually get rid
8
00:00:19,883 --> 00:00:24,883
of the code we wrote in the last lecture.
9
00:00:24,920 --> 00:00:26,350
Okay, so this one here,
10
00:00:26,350 --> 00:00:29,533
responsible for performing the embedding basically.
11
00:00:30,650 --> 00:00:33,800
And now let's go here to our guides field.
12
00:00:33,800 --> 00:00:34,670
Okay?
13
00:00:34,670 --> 00:00:36,570
So this time in this video,
14
00:00:36,570 --> 00:00:40,860
the idea is that tours and users will always remain
15
00:00:40,860 --> 00:00:43,760
completely separate entities in our database.
16
00:00:43,760 --> 00:00:44,593
Okay?
17
00:00:44,593 --> 00:00:47,130
So all we save on a certain tour document
18
00:00:47,130 --> 00:00:50,290
is the IDs of the users that are the tour guides
19
00:00:50,290 --> 00:00:52,000
for that specific tour.
20
00:00:52,000 --> 00:00:53,900
Then when we query the tour,
21
00:00:53,900 --> 00:00:57,170
we want to automatically get access to the tour guides.
22
00:00:57,170 --> 00:00:59,450
But again, without them being actually
23
00:00:59,450 --> 00:01:02,060
saved on the tour document itself.
24
00:01:02,060 --> 00:01:04,319
And that exactly is referencing.
25
00:01:04,319 --> 00:01:08,150
So just as we talked about by the beginning of this section.
26
00:01:08,150 --> 00:01:08,983
All right?
27
00:01:08,983 --> 00:01:10,020
And so let me now show you
28
00:01:10,020 --> 00:01:13,419
how we can implement referencing using Mongoose.
29
00:01:13,419 --> 00:01:14,450
Okay?
30
00:01:14,450 --> 00:01:18,545
So, here in the guides we will now want to specify an array.
31
00:01:18,545 --> 00:01:19,610
Okay?
32
00:01:19,610 --> 00:01:23,000
So just like we did before with the locations.
33
00:01:23,000 --> 00:01:24,510
And so that then again means
34
00:01:24,510 --> 00:01:26,930
that these will be some sub-documents.
35
00:01:26,930 --> 00:01:28,770
So embedded documents.
36
00:01:28,770 --> 00:01:29,603
All right?
37
00:01:30,480 --> 00:01:32,360
And now the type is going to be
38
00:01:32,360 --> 00:01:35,470
a new type that we never saw before.
39
00:01:35,470 --> 00:01:40,470
And that is mongoose.Schema.objectId.
40
00:01:44,715 --> 00:01:45,599
Okay?
41
00:01:45,599 --> 00:01:47,874
And what this means is that we expect
42
00:01:47,874 --> 00:01:49,780
a type of each of the elements
43
00:01:49,780 --> 00:01:53,220
in the guides array to be a MongoDB ID.
44
00:01:53,220 --> 00:01:54,053
All right?
45
00:01:54,053 --> 00:01:57,220
And here actually it needs to be a capital O,
46
00:01:57,220 --> 00:01:59,520
okay, otherwise it's not gonna work,
47
00:01:59,520 --> 00:02:03,880
and also all of this here needs to be inside of an object,
48
00:02:03,880 --> 00:02:06,880
just like any other schema type definition.
49
00:02:06,880 --> 00:02:09,402
Okay, because that's all this really is.
50
00:02:11,140 --> 00:02:16,140
Okay, so the type is of this MongoDB ID, basically,
51
00:02:16,670 --> 00:02:20,303
and then we also need to now specify the reference.
52
00:02:21,210 --> 00:02:24,020
And this is where the magic happens behind the scenes,
53
00:02:24,020 --> 00:02:28,630
because here, now we say that the reference should be user.
54
00:02:28,630 --> 00:02:32,140
Okay, and so this really is how we establish references
55
00:02:32,140 --> 00:02:35,170
between different data sets in Mongoose.
56
00:02:35,170 --> 00:02:37,540
And for this we actually do not even need
57
00:02:37,540 --> 00:02:42,060
to have the user to be imported into this document.
58
00:02:42,060 --> 00:02:44,910
So we actually had that here, but we don't even need it.
59
00:02:44,910 --> 00:02:46,970
We had that here for the previous lecture,
60
00:02:46,970 --> 00:02:48,620
but we can comment it out,
61
00:02:48,620 --> 00:02:52,455
because what we just did here is still gonna work.
62
00:02:52,455 --> 00:02:53,950
Okay?
63
00:02:53,950 --> 00:02:57,420
So, let's now go ahead and create a new tour,
64
00:02:57,420 --> 00:03:00,370
and actually I'm going to do it just the way we did before.
65
00:03:01,440 --> 00:03:03,973
So let's just go ahead and delete this one.
66
00:03:05,400 --> 00:03:06,833
Where is the ID?
67
00:03:08,931 --> 00:03:10,560
Here we go.
68
00:03:10,560 --> 00:03:11,933
So delete tour.
69
00:03:14,760 --> 00:03:17,113
So we can use our API for that already.
70
00:03:19,700 --> 00:03:23,600
All right, and now we create a new tour.
71
00:03:23,600 --> 00:03:24,930
And so just like before,
72
00:03:24,930 --> 00:03:28,950
all we pass into the guides is an array of the IDs.
73
00:03:28,950 --> 00:03:29,783
All right?
74
00:03:29,783 --> 00:03:31,226
But this time we actually specified
75
00:03:31,226 --> 00:03:35,010
that an object ID is exactly what we expect.
76
00:03:35,010 --> 00:03:35,843
Right?
77
00:03:35,843 --> 00:03:39,420
So, this here is of the type object ID.
78
00:03:39,420 --> 00:03:42,957
But behind the scenes, it's also referenced to the user.
79
00:03:42,957 --> 00:03:44,200
All right?
80
00:03:44,200 --> 00:03:47,300
So, when we now create this tour here,
81
00:03:47,300 --> 00:03:50,090
it will actually only contain these IDs,
82
00:03:50,090 --> 00:03:53,640
and not the user corresponding to the IDs.
83
00:03:53,640 --> 00:03:55,090
So let's take a look at that.
84
00:03:56,500 --> 00:03:59,040
And so yeah, here we go.
85
00:03:59,040 --> 00:04:01,720
So this is exactly the data that we put in.
86
00:04:01,720 --> 00:04:04,430
Just the IDs of the tour guides.
87
00:04:04,430 --> 00:04:07,010
Okay, and that's exactly what we were expecting.
88
00:04:07,010 --> 00:04:09,410
Because for now, all we really have
89
00:04:09,410 --> 00:04:11,790
is the references inside Mongoose.
90
00:04:11,790 --> 00:04:14,430
And we will then take care of actually getting the data
91
00:04:14,430 --> 00:04:17,730
to show up in our output in the next video.
92
00:04:17,730 --> 00:04:20,329
Okay, because we will do that in two different ways.
93
00:04:21,209 --> 00:04:24,323
Let's also take a look here at Compass really quick,
94
00:04:25,930 --> 00:04:30,930
just to see that as well where is that, yeah, here.
95
00:04:30,960 --> 00:04:33,680
So you see object ID actually,
96
00:04:33,680 --> 00:04:36,480
and then of course, the IDs that we passed in.
97
00:04:36,480 --> 00:04:39,960
So just as we expected with tours and users,
98
00:04:39,960 --> 00:04:42,620
still two completely different entities.
99
00:04:42,620 --> 00:04:44,860
And as I said before, in the next video,
100
00:04:44,860 --> 00:04:47,290
we will then take care of actually displaying
101
00:04:47,290 --> 00:04:49,030
the user data in the output,
102
00:04:49,030 --> 00:04:51,533
using a process called populating.
7684
Can't find what you're looking for?
Get subtitles in any language from opensubtitles.com, and translate them here.