Trường địa phương và trường nước ngoài 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 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

Khi bạn đang truy vấn dữ liệu trong MongoDB, sẽ có lúc bạn cần thông tin được lưu trữ trong tài liệu trên nhiều bộ sưu tập. Hàm $lookup giúp dễ dàng “nối” nhiều bộ sưu tập, trả về kết quả chứa các trường từ tất cả các bộ sưu tập đã chỉ định. Trong hướng dẫn này, chúng ta sẽ xem xét kỹ hơn hàm $lookup trong MongoDB và xem một số ví dụ về cách nó được sử dụng

Điều kiện tiên quyết

Trước khi tiếp tục với hướng dẫn này, hãy đảm bảo rằng MongoDB đã được cài đặt và định cấu hình trên máy của bạn

Tổng quan về $lookup

Như chúng tôi đã đề cập trước đó, hàm $lookup trong MongoDB cho phép chúng tôi nối các tài liệu trên các bộ sưu tập nằm trong cùng một cơ sở dữ liệu. Hàm $lookup sẽ trả về các tài liệu như thể chúng đến từ bộ sưu tập 'đã tham gia' này, dưới dạng một mảng con của bộ sưu tập gốc đích. Hàm này có thể xử lý cả truy vấn phụ không tương quan và đối sánh đẳng thức

Tạo tập dữ liệu mẫu

Hãy bắt đầu bằng cách tạo tập dữ liệu mẫu mà chúng ta có thể sử dụng trong các ví dụ của mình

db. địa chỉ. insertMany(
    [
        {
            "tên". "rommel",
            "blk_no". 12,
            "đường phố". "phố dewey",
            "thành phố". "olongapo"
        },
        {
            "tên". "gary",
            "blk_no". 15,
            "đường phố". "phố gordon",
            "thành phố". "olongapo"
        }
    ]
);

Chúng ta sẽ thấy đầu ra giống như sau

{
        "đã xác nhận". true,
        "insertedIds". [
          ObjectId("5e2934cdbf4122213c8171a1"),
          ObjectId("5e2934cdbf4122213c8171a2")
        ]
}

Bây giờ chúng tôi sẽ chèn tài liệu vào một bộ sưu tập khác

db. thông tin người dùng. insertMany(
    [
        {
            "contact_name". "rommel",
            "tuổi". 37,
            "tình dục". "nam",
            "quốc tịch". "Người Philippines"
        },
        {
            "contact_name". "gary",
            "tuổi". 32,
            "tình dục". "nam",
            "quốc tịch". "Người Philippines"
        }
    ]
);

Đầu ra của chúng tôi sẽ trông như thế này

{
        "đã xác nhận". true,
        "insertedIds". [
          ObjectId("5e2934cdbf4122213c8171a1"),
          ObjectId("5e2934cdbf4122213c8171a2")
        ]
}

Lưu ý rằng trường name trong bộ sưu tập address có cùng giá trị với trường contact_name trong bộ sưu tập userInfo

$lookup So khớp bình đẳng

Bây giờ chúng ta đã có tập dữ liệu mẫu, chúng ta có thể xem ví dụ về cách sử dụng hàm $lookup trong MongoDB

db. thông tin người dùng. tổng hợp([
    { $lookup.
        {
         từ. "địa chỉ",
         localField. "contact_name",
         foreignField. "tên",
         như. "địa chỉ"
        }
    }
]). xinh();

Hãy xem xét chi tiết hơn về truy vấn này

  • Trường from cho biết bộ sưu tập MongoDB mà chúng tôi muốn tham gia
  • localField chỉ định trường cục bộ cho bộ sưu tập mà chúng tôi đang thực hiện truy vấn của mình
  • Trường foreignField biểu thị trường mục tiêu từ bộ sưu tập khác mà chúng tôi dự định tham gia
  • Cụm từ
    npm install mongoose
    0 sẽ chỉ định tên của mảng đầu ra của chúng tôi trong kết quả

Đầu ra sẽ trông giống như thế này

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

{
        "_id". ObjectId("5e2935ebbf4122213c8171a5"),
        "contact_name". "rommel",
        "tuổi". 37,
        "tình dục". "nam",
        "quốc tịch". "Tiếng Philipin",
        "địa chỉ". [
              {
                    "_id". ObjectId("5e2934cdbf4122213c8171a1"),
                      "tên". "rommel",
                      "blk_no". 12,
                      "đường phố". "phố dewey",
                        "thành phố". "olongapo"
                }
      ]
}
{
        "_id" : ObjectId("5e2935ebbf4122213c8171a6"),
        "tên_liên hệ". "gary",
        "tuổi". 32,
        "tình dục". "nam",
        "quốc tịch". "Tiếng Philipin",
        "địa chỉ". [
              {
                    “_id”. ObjectId("5e2934cdbf4122213c8171a2"),
                      "tên". "gary",
                      "blk_no". 15,
                      "đường phố". "phố gordon",
                      "thành phố". "olongapo"
                }
      ]
}

$lookup trong Đường ống và với Ví dụ về Điều kiện

Trong phần này, chúng ta sẽ xem xét một ví dụ khác về cách sử dụng tập hợp $lookup trên các quy trình có điều kiện

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

db. thông tin người dùng. tổng hợp([
 { $lookup.
     {
       từ. "địa chỉ",
       hãy để. { thành phố. "$city", the_name. "$name"},
       đường dẫn. [
          { $match.
              { $expr.
                { $and.
                    [
                       { $gt. [ "$city", "$$the_city"] },
                       { $eq. ["$$the_name", "$contact_name" ] }
                  ]
                      }
              }
            }
        ],
        as: "address"
        }
 }
]). xinh();

Có rất nhiều thứ đang diễn ra trong lệnh này, vì vậy hãy xem xét từng phần của nó chi tiết hơn một chút. Trước tiên, lưu ý rằng chúng tôi đã thay thế các trường localField

npm install mongoose
2 bằng các trường address0 và address1 tương ứng

  • Trường address0 là tùy chọn, nhưng nó có thể hữu ích khi chúng ta cần xác định các biến để sử dụng trong quy trình

  • Trường address1 sẽ thực hiện liên kết với bộ sưu tập

Hãy xem xét kỹ hơn hai dòng này nói riêng

{ $gt. [ "$city", "$$the_city"] },
{ $eq. ["$$the_name", "$contact_name" ] }

Lưu ý rằng chúng tôi đã sử dụng ký hiệu đô la kép address4— điều này cho phép chúng tôi tham chiếu các biến mà chúng tôi đã xác định trong trường address0. Chúng ta có thể tham chiếu một trường nước ngoài bằng ký hiệu đô la duy nhất address6

Đầu ra sẽ trông giống như sau

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46

{
        "_id". ObjectId("5e2935ebbf4122213c8171a5"),
        "contact_name". "rommel",
        "tuổi". 37,
        "tình dục". "nam",
        "quốc tịch". "Tiếng Philipin",
        "địa chỉ". [
              {
                    "_id". ObjectId("5e2934cdbf4122213c8171a1"),
                      "tên". "rommel",
                      "blk_no". 12,
                      "đường phố". "phố dewey",
                        "thành phố". "olongapo"
              },
              {
                    "_id". ObjectId("5e2934cdbf4122213c8171a2"),
                      "tên". "gary",
                      "blk_no". 15,
                      "đường phố". "phố gordon",
                      "thành phố". "olongapo"
                }
      ]
}
{
        "_id" : ObjectId("5e2935ebbf4122213c8171a6"),
        "tên_liên hệ". "gary",
        "tuổi". 32,
        "tình dục". "nam",
        "quốc tịch". "Người Philippines",
        "địa chỉ". [
              {
                      "_id". ObjectId("5e2934cdbf4122213c8171a1"),
                      "tên". "rommel",
                      "blk_no". 12,
                      "đường phố". "phố dewey",
                        "thành phố". "olongapo"
              },
              {
                    "_id". ObjectId("5e2934cdbf4122213c8171a2"),
                      "tên". "gary",
                      "blk_no". 15,
                      "đường phố". "phố gordon",
                      "thành phố". "olongapo"
                }
      ]
}

Sự kết luận

Khi bạn cần tham gia hai bộ sưu tập MongoDB và truy xuất các trường từ tài liệu được lưu trữ trong cả hai bộ sưu tập đó, hàm $lookup có thể giúp bạn nhắm mục tiêu đúng dữ liệu và nhận được kết quả mong muốn. Trong bài viết này, chúng tôi đã cung cấp tổng quan cơ bản về hàm $lookup trong MongoDB và xem qua một số ví dụ về cách sử dụng hàm. Với các ví dụ và hướng dẫn này, bạn sẽ có thể sử dụng chức năng này và tạo các truy vấn hiệu quả hơn trong môi trường MongoDB của riêng mình

LocalField trong MongoDB là gì?

localField. Chỉ định trường từ đầu vào tài liệu đến giai đoạn $lookup . $lookup thực hiện khớp bình đẳng trên localField với ForeignField từ các tài liệu của bộ sưu tập from.

Chúng tôi có thể tham gia 2 bộ sưu tập trong MongoDB không?

Để 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.

Sự khác biệt giữa việc sử dụng tổng hợp () và tìm () trong MongoDB là gì?

Với tính năng tổng hợp + $match, bạn nhận được một BSON nguyên khối lớn chứa tất cả các tài liệu phù hợp. Với tính năng tìm kiếm, bạn có thể di chuyển con trỏ tới tất cả các tài liệu phù hợp. Sau đó, bạn có thể lấy từng tài liệu một .

$unwind trong MongoDB là gì?

Định nghĩa. thư giãn $. Giải cấu trúc trường mảng từ tài liệu đầu vào để xuất tài liệu cho mỗi phần tử . Mỗi tài liệu đầu ra là tài liệu đầu vào với giá trị của trường mảng được thay thế bằng phần tử.