Chúng ta có thể viết các phép nối trong MongoDB không?
Một trong những điểm khác biệt lớn nhất giữa cơ sở dữ liệu SQL và NoSQL là THAM GIA. Trong cơ sở dữ liệu quan hệ, mệnh đề THAM GIA SQL cho phép bạn kết hợp các hàng từ hai hoặc nhiều bảng bằng cách sử dụng một trường chung giữa chúng. Ví dụ: nếu bạn có các bảng 3 và 4, bạn có thể viết các lệnh SQL chẳng hạn như Show
Nói cách khác, bảng 5 có trường 6 tham chiếu trường 7 trong bảng 8Điều này là thực tế, vì một nhà xuất bản có thể cung cấp hàng nghìn cuốn sách. Nếu chúng tôi cần cập nhật thông tin chi tiết của nhà xuất bản, chúng tôi có thể thay đổi một bản ghi. Dư thừa dữ liệu được giảm thiểu vì chúng tôi không cần lặp lại thông tin nhà xuất bản cho mọi cuốn sách. Kỹ thuật này được gọi là chuẩn hóa Cơ sở dữ liệu SQL cung cấp một loạt các tính năng chuẩn hóa và ràng buộc để đảm bảo các mối quan hệ được duy trì NoSQL == Không THAM GIA?Không phải lúc nào… Cơ sở dữ liệu hướng tài liệu như MongoDB được thiết kế để lưu trữ dữ liệu không chuẩn hóa. Lý tưởng nhất, không nên có mối quan hệ giữa các bộ sưu tập. Nếu cùng một dữ liệu được yêu cầu trong hai hoặc nhiều tài liệu, nó phải được lặp lại Điều này có thể gây khó chịu vì có một số tình huống mà bạn không bao giờ cần dữ liệu quan hệ. May mắn thay, MongoDB 3. 2 giới thiệu toán tử 9 mới có thể thực hiện thao tác giống như LEFT-OUTER-JOIN trên hai hoặc nhiều bộ sưu tập. Nhưng có một nhược điểm…Tập hợp MongoDB 9 chỉ được phép trong các hoạt động tổng hợp. Hãy coi đây là một hệ thống các toán tử truy vấn, lọc và nhóm một kết quả. Đầu ra của một toán tử được sử dụng làm đầu vào cho tiếp theoTổng hợp khó hiểu hơn các truy vấn 1 đơn giản hơn và nhìn chung sẽ chạy chậm hơn. Tuy nhiên, chúng mạnh mẽ và là một tùy chọn vô giá cho các hoạt động tìm kiếm phức tạpTập hợp được giải thích tốt nhất với một ví dụ. Giả sử chúng ta đang tạo một nền tảng truyền thông xã hội với bộ sưu tập 2. Nó lưu trữ mọi chi tiết của người dùng trong các tài liệu riêng biệt. Ví dụ
Chúng tôi có thể thêm bao nhiêu trường nếu cần, nhưng tất cả các tài liệu MongoDB đều yêu cầu trường 3 có giá trị duy nhất. 3 tương tự như khóa chính của SQL và sẽ được chèn tự động nếu cầnMạng xã hội của chúng tôi hiện yêu cầu bộ sưu tập 5, nơi lưu trữ nhiều cập nhật sâu sắc từ người dùng. Các tài liệu lưu trữ văn bản, ngày tháng, xếp hạng và tham chiếu đến người dùng đã viết nó trong trường 6
Bây giờ chúng tôi muốn hiển thị 20 bài đăng cuối cùng có xếp hạng “quan trọng” từ tất cả người dùng theo thứ tự thời gian đảo ngược. Mỗi tài liệu được trả lại phải chứa văn bản, thời gian của bài đăng, tên và quốc gia của người dùng được liên kết Truy vấn tổng hợp MongoDB được thông qua một mảng các toán tử đường ống xác định từng thao tác theo thứ tự. Trước tiên, chúng tôi cần trích xuất tất cả các tài liệu từ bộ sưu tập 5 có xếp hạng chính xác bằng cách sử dụng bộ lọc 8 9Bây giờ chúng ta phải sắp xếp các mục phù hợp theo thứ tự ngược ngày bằng cách sử dụng toán tử 9 1Vì chúng tôi chỉ yêu cầu hai mươi bài đăng, nên chúng tôi có thể áp dụng giai đoạn 90 để MongoDB chỉ cần xử lý dữ liệu chúng tôi muốn 3Bây giờ chúng ta có thể tham gia dữ liệu từ bộ sưu tập 2 bằng cách sử dụng mới. Nó yêu cầu một đối tượng có bốn tham số
Do đó, nhà điều hành của chúng tôi là 0Điều này sẽ tạo ra một trường mới trong đầu ra của chúng tôi có tên là 98. Nó chứa một mảng trong đó mỗi giá trị khớp với tài liệu 2 3Chúng tôi có mối quan hệ một đối một giữa 10 và 11, vì một bài đăng chỉ có thể có một tác giả. Do đó, mảng 98 của chúng ta sẽ chỉ chứa một mục. Chúng ta có thể sử dụng toán tử 13 để giải mã nó thành một tài liệu con 8Đầu ra bây giờ sẽ được chuyển đổi sang định dạng thực tế hơn, có thể áp dụng thêm các toán tử 9Cuối cùng, chúng tôi có thể trả lại văn bản, thời gian của bài đăng, tên người dùng và quốc gia bằng cách sử dụng giai đoạn 14 trong quy trình 0Để tất cả chúng cùng nhauTruy vấn tổng hợp cuối cùng của chúng tôi khớp với các bài đăng, sắp xếp theo thứ tự, giới hạn ở 20 mục mới nhất, kết hợp dữ liệu người dùng, làm phẳng mảng người dùng và chỉ trả về các trường cần thiết. Lệnh đầy đủ 1Kết quả là một bộ sưu tập lên đến hai mươi tài liệu. Ví dụ 2Tuyệt quá. Cuối cùng tôi cũng có thể chuyển sang NoSQLMongoDB 9 rất hữu ích và mạnh mẽ, nhưng ngay cả ví dụ cơ bản này cũng yêu cầu một truy vấn tổng hợp phức tạp. Nó không phải là sự thay thế cho mệnh đề THAM GIA mạnh mẽ hơn được cung cấp trong SQL. MongoDB cũng không đưa ra các ràng buộc; Lý tưởng nhất là toán tử 9 không được yêu cầu thường xuyên. Nếu bạn cần nó nhiều, có thể bạn đang sử dụng sai kho lưu trữ dữ liệu…
Điều đó nói rằng, 9 là một bổ sung đáng hoan nghênh cho MongoDB 3. 2. Nó có thể khắc phục một số vấn đề khó chịu hơn khi sử dụng một lượng nhỏ dữ liệu quan hệ trong cơ sở dữ liệu NoSQLChia sẻ bài viết nàyCraig Buckler Craig là một nhà tư vấn web tự do ở Vương quốc Anh, người đã xây dựng trang đầu tiên của mình cho IE2. 0 vào năm 1995. Kể từ thời điểm đó, anh ấy đã ủng hộ các tiêu chuẩn, khả năng truy cập và các kỹ thuật HTML5 thực hành tốt nhất. Anh ấy đã tạo các thông số kỹ thuật doanh nghiệp, trang web và ứng dụng trực tuyến cho các công ty và tổ chức bao gồm Nghị viện Vương quốc Anh, Nghị viện Châu Âu, Bộ Năng lượng & Biến đổi Khí hậu, Microsoft, v.v. Anh ấy đã viết hơn 1.000 bài báo cho SitePoint và bạn có thể tìm thấy anh ấy @craigbuckler Làm cách nào để sử dụng phép nối trong MongoDB?Để thực hiện MongoDB Tham gia hai bộ sưu tập, bạn phải sử dụng toán tử tra cứu $ . Nó được định nghĩa là một giai đoạn thực hiện nối ngoài bên trái với một bộ sưu tập khác và hỗ trợ lọc dữ liệu từ các tài liệu đã nối. Ví dụ: nếu người dùng yêu cầu tất cả các điểm từ tất cả học sinh, thì truy vấn bên dưới có thể được viết. Sinh viên.
Tại sao phép nối không được sử dụng trong MongoDB?Trong MongoDB, một mẫu phổ biến là nhúng. Trong quan hệ khi bình thường hóa mọi thứ được chia thành nhiều phần. Thông thường trong mongo, các phần này kết thúc bằng một tài liệu duy nhất , vì vậy dù sao cũng không cần tham gia.
MongoDB có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?6, Mongodb không hỗ trợ tham gia truy vấn như mysql
Làm cách nào để viết truy vấn nối bên trong trong MongoDB?Làm cách nào để thực hiện thao tác Tham gia bên trong MongoDB? . từ. Tên của bộ sưu tập sẽ được tham gia localField và ForeignField. Để tham gia các bộ sưu tập bằng cách sử dụng $lookup, bắt buộc phải có trường từ cả hai bộ sưu tập. . như. Kết nối giữa hai bộ sưu tập trong một kết quả |