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ỉ?
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ì.
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.
Dân số Mongoose chính xác là gì và
nó hữu ích như thế nào trong ứng dụng thể hiện của chúng tôi?
Hãy nói về điều đó tiếp theo.
Như chúng tôi nhận ra, cơ sở dữ liệu tài liệu, cơ sở dữ liệu NoSQL,
không được thiết kế với quan hệ trong tâm trí.
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.
Vâng, đó là khá nhiều cách mọi thứ hoạt động với cơ sở dữ liệu NoSQL như MongoDB.
Vì vậy, bạn không có hỗ trợ cho các mối quan hệ mà bạn có thể
quen thuộc hơn từ thế giới cơ sở dữ liệu quan hệ.
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.
Và sau đó bạn tham gia để tham gia thông tin từ các bản ghi và như vậy.
Vì vậy, loại hỗ trợ đó không tồn tại trong cơ sở dữ liệu NoSQL,
ít nhất là ở một mức độ lớn.
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.
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.
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.
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
đã chứa thông tin.
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,
thay vì sao chép thông tin đó.
Vì vậy, đây là nơi MongoDB hoặc Mongoose,
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.
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
tài liệu khác đó.
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
lấy thông tin từ tài liệu khác và sau đó bao bọc nó
bên trong tài liệu chính xác bằng cách sử dụng hỗ trợ dân số Mongoose.
Đó là những gì chúng ta sẽ thảo luận chi tiết hơn một chút.
Bản thân Mongoose, như chúng ta nhận ra, là một mô-đun được xây dựng
trên đầu trang của MongoDB, không có hỗ trợ rõ ràng cho
tham gia, cách chúng ta nói về tham gia trong thế giới SQL.
Để 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à
làm thế nào nó được cấu trúc thực sự, chúng ta hãy xem một ví dụ.
Trong ví dụ này, chúng ta sẽ xem xét tài liệu món ăn mà chúng tôi
đã sử dụng trong bài tập của chúng tôi.
Trong các tài liệu món ăn mà chúng tôi lưu trữ ở phía máy chủ,
chúng tôi nhận thấy rằng chúng tôi cũng lưu trữ các ý kiến.
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.
Và trường tác giả rõ ràng chứa tên của người
gửi nhận xét cụ thể đó.
Bây giờ, vì chúng tôi đã có một tài liệu người dùng
trong cơ sở dữ liệu của chúng tôi, như chúng tôi đã thấy trong mô-đun này.
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 đó,
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.
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ó.
Và vì vậy khi một bình luận được đăng bởi người dùng,
thay vì lưu trữ tên của người dùng trong bình luận chính nó,
tại sao không có một tham chiếu đến người dùng cụ thể đã đăng bình luận?
Điều này là hữu ích không chỉ trong điều khoản của việc có thể đối
phó với thực tế là bình luận này được đăng bởi người dùng cụ thể.
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
xóa tài liệu, bạn có thể muốn hạn chế loại
hoạt động của một người dùng cụ thể chỉ để những nhận xét
mà người dùng cụ thể đã đăng trước đó.
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.
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,
sau đó Mongo giúp chúng ta thực hiện dân số của
thông tin này từ tài liệu khác vào tài liệu hiện tại.
Vì vậy, đây là nơi dân số Mongoose đến để giải cứu chúng ta.
Lấy ý tưởng này xa hơn, hãy để tôi chỉ cho bạn một
ví dụ chi tiết từ lược đồ bình luận mà chúng tôi đã xác định trước đó.
Vì vậy, trong CommentSchema, chúng tôi đã có trường đánh giá và
trường nhận xét mà chúng tôi đã chỉ định ở đó.
Chúng tôi cũng từng có lĩnh vực tác giả trước đó.
Đối với trường tác giả trước đó, chúng tôi đã lưu trữ tác giả dưới dạng
một chuỗi và, Giá trị mặc định cũng cho tác giả.
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
tác giả thành một loại Mongoose.schema.types.ObjectID.
Vì vậy, có nghĩa là trường tác giả bây giờ sẽ chứa một ObjectID,
đó là một tham chiếu đến một tài liệu người dùng.
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?
Vì vậy, đây là nơi tài sản bổ sung này được gọi là ref,
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,
lược đồ và mô hình mà chúng tôi đã thêm trước đó.
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
tác giả, nhưng thông tin tác giả là dưới dạng một ObjectID. Đó
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.
Bây giờ, điều này giúp chúng ta như thế nào?
Đâ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.
Vậy dân số Mongoose hoạt động như thế nào?
Với quần thể Mongoose, cách quần thể Mongoose hoạt động là
nó tự động thay thế các đường dẫn được chỉ định trong một tài liệu hiện tại.
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.
Vì vậy, trong lược đồ chú thích, ví dụ, bạn có một trường tác giả
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.
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,
sau đó nó sẽ điền thông tin về tác giả trong trường nhận xét
từ tài liệu người dùng.
Vì vậy, thông tin về tác giả cụ thể được tham chiếu ở đó sẽ được
lấy và thêm vào tài liệu món ăn của bạn.
Và tài liệu hợp chất sẽ được xây dựng và sau đó gửi lại cho bạn.
Làm thế nào để chúng ta đảm bảo rằng điều này xảy ra?
Đây là nơi mà tham chiếu chéo với ObjectID, như chúng ta đã thấy, giúp chúng ta.
Làm thế nào để dân số thực sự xảy ra trong mã?
Hãy nhìn vào cách chúng ta sẽ cư trú,
ví dụ, các món ăn tài liệu chúng ta vừa thấy trước đó.
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.
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.
Và sau đó cung cấp trong dân cư, như một tham số,
lĩnh vực cụ thể cần phải được dân cư.
Vì vậy, ở đây chúng tôi đang chỉ định bình luận .author.
Bây giờ kỳ vọng là trường bình luận .author
thực sự là một OjectID tham chiếu đến tài liệu người dùng.
Và đó là cách chúng tôi đã thiết lập lược đồ bình luận của chúng tôi đã.
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à
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.
Và sau đó lấy tài liệu người dùng đó và
đư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.
Và sau đó, tất nhiên,
có một số tiếp theo xử lý dữ liệu mà bạn đã thu được.
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.
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
không phải là một nhiệm vụ dễ dàng cho máy chủ để làm.
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.
Sau đó, cho mỗi và mỗi bình luận, sau đó bạn cần phải tìm ra ObjectID của
họ cho người dùng.
Sau đó, bạn đi và lấy tài liệu người dùng đó và
sau đó điền nó vào trong tài liệu món ăn.
Và sau đó, điều đó phải được lặp lại cho
mỗi nhận xét duy nhất được chứa trong tài liệu Món ăn đó.
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ủ
để hoàn thành yêu cầu và gửi lại thông tin cho phía máy khách.
Vì vậy, tôi sẽ đề nghị rằng bạn nên sử dụng cư trú rất khôn ngoan.
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 đó.
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.
Khi bạn chỉ xây dựng thực đơn cho nhà hàng của bạn,
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
nhận xét vào tài liệu nhận xét ở tất cả.
Bởi vì khi bạn chỉ vẽ thực đơn cho nhà hàng của bạn,
bạn sẽ không được hiển thị ý kiến cho món ăn cụ thể đó.
Nhưng thay vào đó, nếu người dùng đang kiểm tra một món ăn cụ thể và
muốn xem các nhận xét tại thời điểm đó,
bạn có thể muốn thực hiện một yêu cầu phía máy chủ.
Và sau đó lấy thông tin nhận xét với các thông tin tác giả khác được
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.
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,
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.
Vì vậy, sự linh hoạt mà cư trú cung cấp cho
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.
Nhưng chúng ta có thể điền thông tin khi chúng ta thực sự cần thông tin đó.
Với sự hiểu biết nhanh chóng này về dân số Mongoose, chúng ta
hãy chuyển sang bài tập nơi chúng ta sẽ sửa đổi giản đồ món ăn,
giản đồ ý kiến trong giản đồ món ăn.
Và sau đó sử dụng Mongoose cư trú để điền thông tin trong các món ăn của chúng
tôi khi chúng tôi trả lại thông tin món ăn cho phía máy chủ.
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ể,
tác giả của thông tin của nhận xét phải được chụp ở phía máy chủ.
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
tôi, chúng tôi đã có thông tin này được cung cấp cho chúng tôi.
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
mọi yêu cầu đến từ phía khách hàng.
Và họ sử dụng thông tin người dùng có sẵn cho chúng tôi.
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ẽ
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.
Điều này nên được thực hiện tự động ở phía máy chủ.
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.
Nhưng phía máy chủ nên xác nhận người dùng và chỉ cho
người dùng đã đăng nhập, bạn sẽ cho phép họ, trước hết, đăng nhận xét.
Và sau đó khi họ đăng nhận xét,
bạn sẽ tự động điền vào trường tác giả cho tài liệu nhận xét đó
bằng cách thay thế trường tác giả bằng ObjectID của người dùng.
Bây giờ, trong bài tập, bạn sẽ thấy tôi làm điều đó.
Vì vậy, hãy xem ra cho điều cụ thể đó trong bài tập.
Với điều này, chúng tôi hoàn thành bài giảng này, chúng ta
hãy tiến hành bài tập để kiểm tra việc sử dụng dân số Mongoose.
[ NHẠC]