Làm cách nào để tham gia truy vấn trong mongodb bằng toán tử tra cứu $?

Toán tử $lookup là toán tử tổng hợp hoặc giai đoạn tổng hợp, được sử dụng để nối tài liệu từ một bộ sưu tập này với tài liệu của một bộ sưu tập khác của cùng một cơ sở dữ liệu dựa trên một số truy vấn. Cả hai bộ sưu tập phải thuộc cùng một cơ sở dữ liệu

Tập hợp trong MongoDB là một thao tác nhóm các giá trị từ nhiều tài liệu lại với nhau và có thể thực hiện nhiều thao tác khác nhau trên dữ liệu được nhóm để trả về một kết quả duy nhất. Và $lookup là một trong những hoạt động mà tập hợp thực hiện

$lookup hoạt động như thế nào?

Chúng tôi có hai bộ sưu tập, bộ sưu tập đầu vào (bộ sưu tập mà $lookup được thực hiện) và từ bộ sưu tập (bộ sưu tập mà chúng tôi lấy tài liệu để nối nó với tài liệu của bộ sưu tập đầu vào)

$lookup lấy các tài liệu đã chọn từ “từ bộ sưu tập” dựa trên một số truy vấn và sau đó đính kèm chúng vào tài liệu của “bộ sưu tập đầu vào” trong một trường mảng riêng. Nó giống như phép nối ngoài bên trái của SQL

Thực hiện $lookup với Kết hợp bình đẳng

Trong đối sánh bình đẳng, đối với mỗi tài liệu, giá trị của bất kỳ trường cụ thể nào của tài liệu bộ sưu tập đầu vào được so sánh với giá trị của bất kỳ trường cụ thể nào của mỗi tài liệu bộ sưu tập và nếu chúng khớp nhau, tài liệu bộ sưu tập cụ thể đó sẽ được đính kèm với tài liệu bộ sưu tập đầu vào

cú pháp. toán tử tra cứu $

{
    $lookup:
    {
        from: < "from collection" >,
        localField: < any field from "input collection" >,
        foreignField: < any field from "from collection" >,
        as: < attached array field >
    }
}
  • từ. Đó là trường chứa tên của “từ bộ sưu tập“, từ đó các tài liệu sẽ được lấy để nối chúng với các tài liệu của bộ sưu tập đầu vào
  • trường địa phương. Đó là bất kỳ trường nào của bộ sưu tập đầu vào mà giá trị của nó sẽ được so sánh với giá trị của trường ngoại
  • vùng ngoại quốc. Đó là bất kỳ trường nào của bộ sưu tập mà giá trị của nó sẽ được so sánh với giá trị localField
  • như. Đây là trường mảng trong đó các tài liệu phù hợp của từ bộ sưu tập sẽ được lưu trữ

Cài đặt Mongoose

Bước 1. Bạn có thể truy cập vào link Install cầy mangut để cài module cầy mangut. Bạn có thể cài đặt gói này bằng cách sử dụng lệnh này

npm install mongoose

Bước 2. Bây giờ bạn có thể nhập mô-đun cầy mangut vào tệp của mình bằng cách sử dụng

const mongoose = require('mongoose');

cơ sở dữ liệu. Chúng tôi đã tạo các bộ sưu tập có tên đơn đặt hàng và khách hàng trong cơ sở dữ liệu GFG của chúng tôi với các mục nhập sau hiển thị trong hình bên dưới

Cuối cùng, có vẻ như việc tìm kiếm dữ liệu trong nhiều bộ sưu tập MongoDB cùng một lúc trở nên cần thiết. Được rồi, cần thiết, có thể được diễn đạt mạnh mẽ. “Rất hữu ích” có thể tốt hơn. Cho đến phiên bản 3. 2 trong số MongoDB không thể tham gia, nhưng với phiên bản đó đã xuất hiện toán tử giai đoạn tổng hợp $lookup. Việc giới thiệu $lookup cho phép thực hiện các phép nối ngoài bên trái trên các bộ sưu tập trong cùng một cơ sở dữ liệu không bị phân đoạn

Đối với dữ liệu của chúng tôi cho bài đăng này, hãy sử dụng khái niệm công thức nấu ăn. Tôi sẽ trình bày một số bảng cơ sở dữ liệu SQL truyền thống cơ bản và xem qua cú pháp SQL để tham gia

Làm cách nào để tham gia truy vấn trong mongodb bằng toán tử tra cứu $?

Cú pháp SQL

Chúng ta hãy xem nhanh phép nối ngoài bên trái trông như thế nào trong SQL với một vài cú pháp khác nhau trong SQL

SQL chuẩn
SELECT recipe_type.decription, recipes.title
FROM recipe_type
LEFT OUTER JOIN recipes
ON recipe_type.id = recipes.recipe_type_id
Oracle
SELECT recipe_type.description, recipes.title
FROM recipe_type, recipes
WHERE recipe_type.id = recipes.recipe_type_id(+)

Kết quả của phép nối ngoài bên trái cho hai bảng này sẽ chứa tất cả các hàng từ bảng “bên trái” của chúng tôi (recipe_type)

$lookup cho Tham gia

Làm cách nào để tham gia truy vấn trong mongodb bằng toán tử tra cứu $?
Khái niệm về Left Outer Join

Tham gia của chúng tôi từ $lookup sau đó sẽ giống từ quan điểm khái niệm như người anh em họ SQL của chúng tôi. Giả sử chúng ta có một bộ sưu tập các loại công thức và một trong số các công thức đó giai đoạn $lookup của chúng ta sẽ như sau

{
  $lookup:
    {
      from: "recipes",
      localField: "id",
      foreignField: "recipe_type_id",
      as: "recipe_categories"
    }
}

Sau đó, giai đoạn $lookup của chúng tôi đang thực hiện so khớp bình đẳng giữa hai tài liệu dựa trên các trường

npm install mongoose
1 và
npm install mongoose
2. Nó sẽ thêm một trường mảng mới vào tài liệu trong tài liệu quy trình tổng hợp của chúng tôi và chuyển nó sang giai đoạn tiếp theo của quy trình

Bây giờ, với kiến ​​thức của chúng tôi về thiết kế lược đồ và mô hình tài liệu trong MongoDB, chúng tôi có thể không cần liên kết chính xác này vì hai bộ sưu tập dữ liệu này có thể được nhúng vào một hoặc bộ sưu tập khác. Tuy nhiên, tùy thuộc vào mẫu truy cập dữ liệu và nhu cầu ứng dụng của bạn, các bộ sưu tập có thể đang sử dụng tham chiếu

Gói (lại

Tôi hy vọng điều này đã cung cấp phần giới thiệu hữu ích và nhanh chóng về giai đoạn tổng hợp $lookup và cách có thể thực hiện các phép nối trong MongoDB. Mặc dù bạn có thể không thấy mình sử dụng nó mọi lúc, nhưng đây là một công cụ tuyệt vời để sẵn sàng khi cần

Có một số thuật ngữ cụ thể của MongoDB trong bài đăng này. Tôi đã tạo một kỹ năng Từ điển MongoDB cho dòng sản phẩm Amazon Echo. Hãy xem thử và bạn có thể nói “Alexa, hãy hỏi MongoDB tài liệu là gì?”

$lookup trong MongoDB là gì?

Toán tử $lookup là toán tử tổng hợp hoặc giai đoạn tổng hợp, được sử dụng để nối tài liệu từ một tập hợp này với tài liệu của một tập hợp khác của cùng một cơ sở dữ liệu dựa trên một số . Cả hai bộ sưu tập phải thuộc cùng một cơ sở dữ liệu. . Both the collections should belong to the same databases.

Toán tử $in hoạt động như thế nào MongoDB?

MongoDB cung cấp các loại toán tử truy vấn logic khác nhau và toán tử $in là một trong số đó. Toán tử $in được sử dụng để chọn tài liệu trong đó giá trị của trường bằng bất kỳ giá trị nào đã cho trong mảng . Bạn có thể sử dụng toán tử này trong các phương thức như find(), update(), v.v. , theo yêu cầu của bạn.

Chúng ta có thể viết các phép nối trong MongoDB không?

Tham gia bộ sưu tập . Giai đoạn tra cứu $ cho phép bạn chỉ định bộ sưu tập nào bạn muốn kết hợp với bộ sưu tập hiện tại và trường nào sẽ khớp. you can perform a left outer join by using the $lookup stage. The $lookup stage lets you specify which collection you want to join with the current collection, and which fields that should match.

$EXPR trong MongoDB là gì?

$expr có thể xây dựng các biểu thức truy vấn so sánh các trường từ cùng một tài liệu trong giai đoạn $match . Nếu giai đoạn $match là một phần của giai đoạn $lookup, thì $expr có thể so sánh các trường bằng biến let. Xem Thực hiện nhiều phép nối và Truy vấn con tương quan với $lookup để biết ví dụ.