MongoDB nhiều-nhiều

Nhiều-nhiều hữu ích khi bạn có nhiều lược đồ được kết nối với nhau, nó không chỉ có hiệu suất tốt hơn khi có quá nhiều tài liệu mà còn cho khả năng bảo trì.

Giả sử rằng bạn có một lược đồ Sách với Tác giả của nó. Một lược đồ đơn giản mà bạn sẽ xây dựng có thể trông như thế này

Lược đồ Sách đơn giản

Không tệ, có lẽ đối với một ứng dụng đơn giản. Trong trường hợp bạn muốn liệt kê tất cả sách mà tác giả sở hữu hoặc cụ thể hơn là bạn có thể lưu trữ thông tin cá nhân về tác giả, cách tiếp cận tốt hơn sẽ là triển khai mối quan hệ nhiều-nhiều trong cơ sở dữ liệu của bạn

Nhưng sau đó nó sẽ trông như thế nào?

Trong một bối cảnh như đã đề cập ở trên, giả sử chúng ta có một tác giả với các chi tiết cá nhân; . Đó là cách lược đồ của chúng tôi trông giống như bây giờ

Lược đồ tác giả

Bây giờ chúng tôi có thể truy cập thông tin chi tiết về tác giả, nhưng làm cách nào chúng tôi có thể liên kết với lược đồ thông qua tài liệu Sách của chúng tôi?

“ref” (tài liệu tham khảo…)

Trong MongoDB, chúng tôi sử dụng “ref” để liên kết đến một tài liệu trong một bộ sưu tập khác với một tài liệu. Vì vậy, đối với Sách của chúng tôi, chúng tôi đang thay đổi trường tác giả của mình thành trường sau

Book Schema với giới thiệu tới Tác giả

Bây giờ chúng ta có gì?

Trường type hiện đang mô tả rằng chúng tôi sẽ sử dụng loại ObjectId của MongoDB và trường ref cung cấp các tham chiếu đến bộ sưu tập mà chúng tôi có tài liệu bên trong. Bây giờ chúng tôi sẽ không còn sử dụng trường tác giả như một trường hợp cụ thể, chẳng hạn như Tên Họ hoặc id số rất độc đáo của chúng tôi. Để thêm một cuốn sách mới vào bộ sưu tập, chúng ta có thể sử dụng Author’s ObjectId. Bằng cách đó, chúng tôi có thể truy cập trực tiếp vào tác giả hoặc cuốn sách khi cần thiết

Thêm sách mới vào bộ sưu tập

Thêm sách vào bộ sưu tập

Đó là tất cả những gì bạn phải làm. Chúng tôi đã cung cấp ObjectId của tác giả để cung cấp tài liệu tham khảo, vì vậy chúng tôi có thể truy cập trực tiếp vào thông tin chi tiết của tác giả bất cứ lúc nào chúng tôi muốn. Khi bạn sử dụng findOne để lấy sách, bạn nên sử dụng$lookup query trong quy trình tổng hợp hoặc populate method. Bây giờ chúng ta sẽ học cách sử dụng chúng

Hai cách tiếp cận để đánh giá dữ liệu và lấy Tác giả

Bạn có thể nghĩ rằng $lookup hơi phức tạp… chính là. Mặc dù xem xét hiệu suất, nếu bạn đang sử dụng findOne hoặc limit(