1
00:00:04,652 --> 00:00:11,190
Tôi đoán bây giờ, đầu của anh bị nhiễm trùng với con khỉ hay là nó là con khỉ?

2
00:00:11,190 --> 00:00:16,500
Tôi không phải chuyên ngành tiếng Anh, nên tôi không biết số nhiều là gì.

3
00:00:16,500 --> 00:00:22,770
Trong mọi trường hợp, điều đó đưa chúng ta đến chủ đề của bài giảng này, dân số Mongoose.

4
00:00:22,770 --> 00:00:25,120
Dân số Mongoose chính xác là gì và

5
00:00:25,120 --> 00:00:29,800
nó hữu ích như thế nào trong ứng dụng thể hiện của chúng tôi?

6
00:00:29,800 --> 00:00:31,190
Hãy nói về điều đó tiếp theo.

7
00:00:33,100 --> 00:00:38,275
Như chúng tôi nhận ra, cơ sở dữ liệu tài liệu, cơ sở dữ liệu NoSQL,

8
00:00:38,275 --> 00:00:41,767
không được thiết kế với quan hệ trong tâm trí.

9
00:00:41,767 --> 00:00:46,570
Mọi thứ bạn cần trong tài liệu được lưu trữ hoàn toàn trong tài liệu.

10
00:00:46,570 --> 00:00:53,650
Vâng, đó là khá nhiều cách mọi thứ hoạt động với cơ sở dữ liệu NoSQL như MongoDB.

11
00:00:53,650 --> 00:00:58,490
Vì vậy, bạn không có hỗ trợ cho các mối quan hệ mà bạn có thể

12
00:00:58,490 --> 00:01:03,065
quen thuộc hơn từ thế giới cơ sở dữ liệu quan hệ.

13
00:01:03,065 --> 00:01:08,060
Nơi bạn có hồ sơ và sau đó hồ sơ có thể tham chiếu các hồ sơ khác và như vậy.

14
00:01:08,060 --> 00:01:12,510
Và sau đó bạn tham gia để tham gia thông tin từ các bản ghi và như vậy.

15
00:01:12,510 --> 00:01:17,030
Vì vậy, loại hỗ trợ đó không tồn tại trong cơ sở dữ liệu NoSQL,

16
00:01:17,030 --> 00:01:19,010
ít nhất là ở một mức độ lớn.

17
00:01:19,010 --> 00:01:25,120
MongoDB đã thực hiện một vài bước theo hướng đó, ngay cả với các cơ sở dữ liệu NoSQL.

18
00:01:25,120 --> 00:01:31,030
Nhưng nói chung, cơ sở dữ liệu tài liệu mong đợi rằng tất cả các tài liệu đều khép kín.

19
00:01:31,030 --> 00:01:36,740
Vì vậy, có nghĩa là tất cả các thông tin được yêu cầu là trong cùng một tài liệu.

20
00:01:36,740 --> 00:01:41,270
Bây giờ tất nhiên, có những tình huống mà bạn có các tài liệu khác

21
00:01:41,270 --> 00:01:43,657
đã chứa thông tin.

22
00:01:43,657 --> 00:01:47,561
Và bạn có thể muốn kéo thông tin đó vào tài liệu hiện có của bạn,

23
00:01:47,561 --> 00:01:50,580
thay vì sao chép thông tin đó.

24
00:01:50,580 --> 00:01:57,390
Vì vậy, đây là nơi MongoDB hoặc Mongoose,

25
00:01:57,390 --> 00:02:04,290
cho phép bạn lưu trữ tài liệu tham khảo đến các tài liệu khác trong một tài liệu hiện tại.

26
00:02:04,290 --> 00:02:08,953
Tham chiếu đến tài liệu khác được thực hiện bằng cách sử dụng ObjectID của

27
00:02:08,953 --> 00:02:10,125
tài liệu khác đó.

28
00:02:10,125 --> 00:02:14,773
Bây giờ nếu đó là trường hợp, sau đó Mongoose cho phép bạn thực hiện một cách

29
00:02:14,773 --> 00:02:19,588
lấy thông tin từ tài liệu khác và sau đó bao bọc nó

30
00:02:19,588 --> 00:02:25,010
bên trong tài liệu chính xác bằng cách sử dụng hỗ trợ dân số Mongoose.

31
00:02:25,010 --> 00:02:28,230
Đó là những gì chúng ta sẽ thảo luận chi tiết hơn một chút.

32
00:02:28,230 --> 00:02:33,227
Bản thân Mongoose, như chúng ta nhận ra, là một mô-đun được xây dựng

33
00:02:33,227 --> 00:02:38,336
trên đầu trang của MongoDB, không có hỗ trợ rõ ràng cho

34
00:02:38,336 --> 00:02:43,135
tham gia, cách chúng ta nói về tham gia trong thế giới SQL.

35
00:02:43,135 --> 00:02:48,471
Để hiểu cách tham chiếu tài liệu khác trong một tài liệu giúp chúng tôi và

36
00:02:48,471 --> 00:02:53,210
làm thế nào nó được cấu trúc thực sự, chúng ta hãy xem một ví dụ.

37
00:02:53,210 --> 00:02:58,420
Trong ví dụ này, chúng ta sẽ xem xét tài liệu món ăn mà chúng tôi

38
00:02:58,420 --> 00:03:01,210
đã sử dụng trong bài tập của chúng tôi.

39
00:03:01,210 --> 00:03:04,540
Trong các tài liệu món ăn mà chúng tôi lưu trữ ở phía máy chủ,

40
00:03:04,540 --> 00:03:07,590
chúng tôi nhận thấy rằng chúng tôi cũng lưu trữ các ý kiến.

41
00:03:07,590 --> 00:03:12,366
Và trong các nhận xét, chúng tôi cũng lưu trữ một trường tác giả trong các nhận xét.

42
00:03:12,366 --> 00:03:16,750
Và trường tác giả rõ ràng chứa tên của người

43
00:03:16,750 --> 00:03:19,890
gửi nhận xét cụ thể đó.

44
00:03:19,890 --> 00:03:24,961
Bây giờ, vì chúng tôi đã có một tài liệu người dùng

45
00:03:24,961 --> 00:03:30,453
trong cơ sở dữ liệu của chúng tôi, như chúng tôi đã thấy trong mô-đun này.

46
00:03:30,453 --> 00:03:35,151
Chúng tôi đã mở rộng máy chủ chuyên gia của chúng tôi để hỗ trợ người dùng và do đó,

47
00:03:35,151 --> 00:03:40,440
bạn có thể đăng ký một người dùng và rằng bạn có thể xác thực người dùng và như vậy.

48
00:03:40,440 --> 00:03:45,790
Vì vậy, tài liệu người dùng có thể mang thêm thông tin về người dùng đã có.

49
00:03:46,810 --> 00:03:49,302
Và vì vậy khi một bình luận được đăng bởi người dùng,

50
00:03:49,302 --> 00:03:53,043
thay vì lưu trữ tên của người dùng trong bình luận chính nó,

51
00:03:53,043 --> 00:03:57,360
tại sao không có một tham chiếu đến người dùng cụ thể đã đăng bình luận?

52
00:03:58,360 --> 00:04:02,570
Điều này là hữu ích không chỉ trong điều khoản của việc có thể đối

53
00:04:02,570 --> 00:04:07,680
phó với thực tế là bình luận này được đăng bởi người dùng cụ thể.

54
00:04:07,680 --> 00:04:13,934
Sau đó, chúng tôi sẽ thấy rằng nếu bạn cần cho phép người dùng sửa đổi hoặc

55
00:04:13,934 --> 00:04:19,126
xóa tài liệu, bạn có thể muốn hạn chế loại

56
00:04:19,126 --> 00:04:24,436
hoạt động của một người dùng cụ thể chỉ để những nhận xét

57
00:04:24,436 --> 00:04:28,937
mà người dùng cụ thể đã đăng trước đó.

58
00:04:28,937 --> 00:04:36,649
Mặc dù chúng tôi đang sử dụng tài liệu phụ trong tài liệu Mongo của chúng tôi.

59
00:04:36,649 --> 00:04:42,292
Nếu chúng ta có thể tham khảo một tài liệu khác trong tài liệu phụ bằng cách sử dụng ObjectIds,

60
00:04:42,292 --> 00:04:45,415
sau đó Mongo giúp chúng ta thực hiện dân số của

61
00:04:45,415 --> 00:04:50,450
thông tin này từ tài liệu khác vào tài liệu hiện tại.

62
00:04:50,450 --> 00:04:54,370
Vì vậy, đây là nơi dân số Mongoose đến để giải cứu chúng ta.

63
00:04:54,370 --> 00:04:57,770
Lấy ý tưởng này xa hơn, hãy để tôi chỉ cho bạn một

64
00:04:57,770 --> 00:05:02,600
ví dụ chi tiết từ lược đồ bình luận mà chúng tôi đã xác định trước đó.

65
00:05:02,600 --> 00:05:06,850
Vì vậy, trong CommentSchema, chúng tôi đã có trường đánh giá và

66
00:05:06,850 --> 00:05:10,080
trường nhận xét mà chúng tôi đã chỉ định ở đó.

67
00:05:10,080 --> 00:05:13,320
Chúng tôi cũng từng có lĩnh vực tác giả trước đó.

68
00:05:13,320 --> 00:05:18,133
Đối với trường tác giả trước đó, chúng tôi đã lưu trữ tác giả dưới dạng

69
00:05:18,133 --> 00:05:23,270
một chuỗi và, Giá trị mặc định cũng cho tác giả.

70
00:05:23,270 --> 00:05:28,285
Bây giờ trong việc lưu trữ tác giả như một chuỗi kiểu, nếu bây giờ chúng ta biến

71
00:05:28,285 --> 00:05:34,200
tác giả thành một loại Mongoose.schema.types.ObjectID.

72
00:05:34,200 --> 00:05:39,350
Vì vậy, có nghĩa là trường tác giả bây giờ sẽ chứa một ObjectID,

73
00:05:39,350 --> 00:05:42,870
đó là một tham chiếu đến một tài liệu người dùng.

74
00:05:42,870 --> 00:05:46,090
Làm thế nào để bạn đảm bảo rằng điều này là tham chiếu một tài liệu người dùng?

75
00:05:46,090 --> 00:05:51,500
Vì vậy, đây là nơi tài sản bổ sung này được gọi là ref,

76
00:05:51,500 --> 00:05:56,160
trong đó xác định rằng lược đồ của tài liệu mà bạn đang đề cập ở đây là loại, người dùng,

77
00:05:56,160 --> 00:05:59,590
lược đồ và mô hình mà chúng tôi đã thêm trước đó.

78
00:05:59,590 --> 00:06:05,144
Vì vậy, trong trường hợp này, lược đồ nhận xét bây giờ được mở rộng để lưu trữ thông tin

79
00:06:05,144 --> 00:06:08,706
tác giả, nhưng thông tin tác giả là dưới dạng một ObjectID. Đó

80
00:06:08,706 --> 00:06:15,480
là một tham chiếu đến tài liệu người dùng đã được lưu trữ trong cơ sở dữ liệu của chúng tôi.

81
00:06:15,480 --> 00:06:17,750
Bây giờ, điều này giúp chúng ta như thế nào?

82
00:06:17,750 --> 00:06:22,667
Đây là nơi mà, như tôi đã nói, dân số Mongoose đến với sự giúp đỡ của chúng tôi.

83
00:06:22,667 --> 00:06:25,120
Vậy dân số Mongoose hoạt động như thế nào?

84
00:06:25,120 --> 00:06:30,150
Với quần thể Mongoose, cách quần thể Mongoose hoạt động là

85
00:06:30,150 --> 00:06:35,363
nó tự động thay thế các đường dẫn được chỉ định trong một tài liệu hiện tại.

86
00:06:35,363 --> 00:06:40,850
Trong đó có tham chiếu đến một tài liệu khác bằng thông tin từ tài liệu khác.

87
00:06:40,850 --> 00:06:46,282
Vì vậy, trong lược đồ chú thích, ví dụ, bạn có một trường tác giả

88
00:06:46,282 --> 00:06:53,070
tham chiếu đến ObjectID của tài liệu người dùng đã có trong cơ sở dữ liệu của bạn.

89
00:06:53,070 --> 00:06:58,963
Vì vậy, với dân số Mongoose, khi bạn yêu cầu Mongoose để điền tài liệu món ăn này,

90
00:06:58,963 --> 00:07:03,820
sau đó nó sẽ điền thông tin về tác giả trong trường nhận xét

91
00:07:03,820 --> 00:07:05,240
từ tài liệu người dùng.

92
00:07:05,240 --> 00:07:09,447
Vì vậy, thông tin về tác giả cụ thể được tham chiếu ở đó sẽ được

93
00:07:09,447 --> 00:07:12,130
lấy và thêm vào tài liệu món ăn của bạn.

94
00:07:12,130 --> 00:07:16,820
Và tài liệu hợp chất sẽ được xây dựng và sau đó gửi lại cho bạn.

95
00:07:16,820 --> 00:07:19,370
Làm thế nào để chúng ta đảm bảo rằng điều này xảy ra?

96
00:07:19,370 --> 00:07:25,020
Đây là nơi mà tham chiếu chéo với ObjectID, như chúng ta đã thấy, giúp chúng ta.

97
00:07:25,020 --> 00:07:30,890
Làm thế nào để dân số thực sự xảy ra trong mã?

98
00:07:30,890 --> 00:07:33,350
Hãy nhìn vào cách chúng ta sẽ cư trú,

99
00:07:33,350 --> 00:07:38,090
ví dụ, các món ăn tài liệu chúng ta vừa thấy trước đó.

100
00:07:38,090 --> 00:07:43,650
Trước đó chúng tôi đã thực hiện các món ăn. Tìm tất cả các món ăn trong cơ sở dữ liệu của chúng tôi.

101
00:07:43,650 --> 00:07:48,645
Bây giờ, một khi bạn tìm thấy tài liệu Dishes, sau đó bạn có thể nói populate.

102
00:07:48,645 --> 00:07:52,647
Và sau đó cung cấp trong dân cư, như một tham số,

103
00:07:52,647 --> 00:07:56,130
lĩnh vực cụ thể cần phải được dân cư.

104
00:07:56,130 --> 00:07:59,380
Vì vậy, ở đây chúng tôi đang chỉ định bình luận .author.

105
00:07:59,380 --> 00:08:02,270
Bây giờ kỳ vọng là trường bình luận .author

106
00:08:02,270 --> 00:08:06,550
thực sự là một OjectID tham chiếu đến tài liệu người dùng.

107
00:08:06,550 --> 00:08:10,502
Và đó là cách chúng tôi đã thiết lập lược đồ bình luận của chúng tôi đã.

108
00:08:10,502 --> 00:08:16,418
Vì vậy, cuộc gọi dân cư này mà chúng tôi thực hiện ở đây sau đó sẽ đi và

109
00:08:16,418 --> 00:08:24,937
lấy từ cơ sở dữ liệu của mỗi tác giả cá nhân hồ sơ hoặc hồ sơ của người dùng.

110
00:08:24,937 --> 00:08:27,457
Và sau đó lấy tài liệu người dùng đó và

111
00:08:27,457 --> 00:08:33,505
đưa nó vào tài liệu món ăn để xây dựng tài liệu hợp chất từ đây.

112
00:08:33,505 --> 00:08:35,525
Và sau đó, tất nhiên,

113
00:08:35,525 --> 00:08:39,579
có một số tiếp theo xử lý dữ liệu mà bạn đã thu được.

114
00:08:39,579 --> 00:08:44,640
Và sau đó trả lời hoặc trả lại dữ liệu cho khách hàng có thể diễn ra tại thời điểm này.

115
00:08:44,640 --> 00:08:49,110
Nhưng tất nhiên, hãy để tôi cảnh báo bạn rằng hoạt động dân số này

116
00:08:49,110 --> 00:08:52,020
không phải là một nhiệm vụ dễ dàng cho máy chủ để làm.

117
00:08:52,020 --> 00:08:56,825
Bởi vì mỗi món ăn duy nhất, bạn sẽ phải kiểm tra mỗi và mỗi bình luận.

118
00:08:56,825 --> 00:09:01,385
Sau đó, cho mỗi và mỗi bình luận, sau đó bạn cần phải tìm ra ObjectID của

119
00:09:01,385 --> 00:09:02,034
họ cho người dùng.

120
00:09:02,034 --> 00:09:04,580
Sau đó, bạn đi và lấy tài liệu người dùng đó và

121
00:09:04,580 --> 00:09:07,203
sau đó điền nó vào trong tài liệu món ăn.

122
00:09:07,203 --> 00:09:09,329
Và sau đó, điều đó phải được lặp lại cho

123
00:09:09,329 --> 00:09:13,113
mỗi nhận xét duy nhất được chứa trong tài liệu Món ăn đó.

124
00:09:13,113 --> 00:09:18,437
Về cơ bản nó có nghĩa là nó sẽ mất một thời gian dài hơn cho phía máy chủ

125
00:09:18,437 --> 00:09:23,720
để hoàn thành yêu cầu và gửi lại thông tin cho phía máy khách.

126
00:09:23,720 --> 00:09:31,020
Vì vậy, tôi sẽ đề nghị rằng bạn nên sử dụng cư trú rất khôn ngoan.

127
00:09:31,020 --> 00:09:35,410
Bạn chỉ nên sử dụng nó trong những trường hợp mà bạn thực sự cần thông tin đó.

128
00:09:36,590 --> 00:09:42,529
Ví dụ, nếu bạn chỉ đơn giản là xây dựng thực đơn cho nhà hàng của bạn.

129
00:09:42,529 --> 00:09:46,522
Khi bạn chỉ xây dựng thực đơn cho nhà hàng của bạn,

130
00:09:46,522 --> 00:09:51,267
bạn có thể không thực sự cần phải điền thông tin về tác giả của mỗi

131
00:09:51,267 --> 00:09:54,010
nhận xét vào tài liệu nhận xét ở tất cả.

132
00:09:54,010 --> 00:09:57,270
Bởi vì khi bạn chỉ vẽ thực đơn cho nhà hàng của bạn,

133
00:09:57,270 --> 00:10:01,730
bạn sẽ không được hiển thị ý kiến cho món ăn cụ thể đó.

134
00:10:01,730 --> 00:10:06,457
Nhưng thay vào đó, nếu người dùng đang kiểm tra một món ăn cụ thể và

135
00:10:06,457 --> 00:10:09,804
muốn xem các nhận xét tại thời điểm đó,

136
00:10:09,804 --> 00:10:13,660
bạn có thể muốn thực hiện một yêu cầu phía máy chủ.

137
00:10:13,660 --> 00:10:19,383
Và sau đó lấy thông tin nhận xét với các thông tin tác giả khác được

138
00:10:19,383 --> 00:10:24,540
nhập vào và có được thông tin đó để sử dụng bên trong khách hàng của chúng tôi.

139
00:10:24,540 --> 00:10:30,240
Vì vậy, một lần nữa, dân cư là một cách tuyệt vời để làm việc khi được yêu cầu,

140
00:10:30,240 --> 00:10:35,610
nhưng sử dụng nó rất tư pháp, chỉ khi bạn thực sự yêu cầu thông tin.

141
00:10:35,610 --> 00:10:38,370
Vì vậy, sự linh hoạt mà cư trú cung cấp cho

142
00:10:38,370 --> 00:10:42,540
chúng ta là thực tế rằng chúng ta không cần phải cư trú khi chúng ta không cần phải.

143
00:10:42,540 --> 00:10:46,990
Nhưng chúng ta có thể điền thông tin khi chúng ta thực sự cần thông tin đó.

144
00:10:48,030 --> 00:10:51,450
Với sự hiểu biết nhanh chóng này về dân số Mongoose, chúng ta

145
00:10:51,450 --> 00:10:57,280
hãy chuyển sang bài tập nơi chúng ta sẽ sửa đổi giản đồ món ăn,

146
00:10:57,280 --> 00:10:59,840
giản đồ ý kiến trong giản đồ món ăn.

147
00:10:59,840 --> 00:11:04,730
Và sau đó sử dụng Mongoose cư trú để điền thông tin trong các món ăn của chúng

148
00:11:04,730 --> 00:11:09,255
tôi khi chúng tôi trả lại thông tin món ăn cho phía máy chủ.

149
00:11:09,255 --> 00:11:15,745
Ngoài ra, điều này cũng ngụ ý rằng khi một nhận xét được thêm vào một món ăn cụ thể,

150
00:11:16,775 --> 00:11:22,210
tác giả của thông tin của nhận xét phải được chụp ở phía máy chủ.

151
00:11:22,210 --> 00:11:26,079
Bây giờ, nó xảy ra như vậy mà cách chúng tôi đã phát triển các máy chủ của chúng

152
00:11:26,079 --> 00:11:29,740
tôi, chúng tôi đã có thông tin này được cung cấp cho chúng tôi.

153
00:11:29,740 --> 00:11:34,870
Khi chúng tôi xác thực người dùng, thông tin của người dùng đã được nạp vào

154
00:11:34,870 --> 00:11:37,580
mọi yêu cầu đến từ phía khách hàng.

155
00:11:37,580 --> 00:11:41,200
Và họ sử dụng thông tin người dùng có sẵn cho chúng tôi.

156
00:11:41,200 --> 00:11:46,170
Vì vậy, khi chúng tôi đang đăng bình luận về phía máy chủ, chúng tôi cũng sẽ

157
00:11:46,170 --> 00:11:52,370
nắm bắt ID của người dùng và sau đó lưu trữ nó trong trường tác giả của lược đồ bình luận.

158
00:11:52,370 --> 00:11:55,430
Điều này nên được thực hiện tự động ở phía máy chủ.

159
00:11:55,430 --> 00:12:00,740
Khách hàng không nên được phép điền vào trường tác giả một cách rõ ràng.

160
00:12:00,740 --> 00:12:04,348
Nhưng phía máy chủ nên xác nhận người dùng và chỉ cho

161
00:12:04,348 --> 00:12:10,020
người dùng đã đăng nhập, bạn sẽ cho phép họ, trước hết, đăng nhận xét.

162
00:12:10,020 --> 00:12:12,688
Và sau đó khi họ đăng nhận xét,

163
00:12:12,688 --> 00:12:18,392
bạn sẽ tự động điền vào trường tác giả cho tài liệu nhận xét đó

164
00:12:18,392 --> 00:12:23,740
bằng cách thay thế trường tác giả bằng ObjectID của người dùng.

165
00:12:23,740 --> 00:12:25,920
Bây giờ, trong bài tập, bạn sẽ thấy tôi làm điều đó.

166
00:12:25,920 --> 00:12:30,780
Vì vậy, hãy xem ra cho điều cụ thể đó trong bài tập.

167
00:12:30,780 --> 00:12:33,245
Với điều này, chúng tôi hoàn thành bài giảng này, chúng ta

168
00:12:33,245 --> 00:12:38,109
hãy tiến hành bài tập để kiểm tra việc sử dụng dân số Mongoose.

169
00:12:38,109 --> 00:12:44,079
[ NHẠC]