Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?

Trong hướng dẫn MongoDB này, Chúng ta sẽ tìm hiểu “Cách nối hai bộ sưu tập vào MongoDB”. Chúng tôi cũng sẽ đề cập đến điều này với các hoạt động khác nhau với các ví dụ. Đây là những chủ đề sau đây mà chúng ta sẽ đề cập trong hướng dẫn này

  • Cái gì được sử dụng để tham gia bộ sưu tập trong MongoDB?
  • MongoDB tham gia hai truy vấn bộ sưu tập
  • MongoDB tham gia hai bộ sưu tập
  • Cách MongoDB tham gia hai bộ sưu tập với mệnh đề where?
  • MongoDB tham gia hai bộ sưu tập với một mảng
  • MongoDB tham gia hai bộ sưu tập theo id
  • Cách MongoDB tham gia hai bộ sưu tập bằng cách sử dụng la bàn
  • MongoDB tham gia hai bộ sưu tập từ cơ sở dữ liệu khác nhau
  • MongoDB tham gia hai bộ sưu tập bằng python

Mục lục

Cái gì được sử dụng để tham gia bộ sưu tập trong MongoDB?

Trong MongoDB, chức năng $lookup (aggregation) cho phép chúng ta 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

$lookup(aggregation) là một giai đoạn tạo liên kết bên ngoài bên trái với một tập hợp khác và hỗ trợ lọc tài liệu từ các tài liệu đã tham gia

Nếu các tài liệu đến từ bộ sưu tập “đã tham gia”, hàm $lookup (tổng hợp) sẽ trả về các tài liệu dưới dạng một mảng con của bộ sưu tập gốc đích

Đọc. Nhóm MongoDB theo nhiều trường

MongoDB tham gia hai truy vấn bộ sưu tập

Trong MongoDB, chúng ta có thể kết hợp dữ liệu của nhiều bộ sưu tập thành một thông qua giai đoạn tổng hợp $lookup

Trong phần này, bạn phải 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à chọn trường khớp với cả hai bộ sưu tập

cú pháp

Đây là cú pháp hoặc truy vấn đơn giản được sử dụng để nối hai tập hợp

{
   $lookup:
     {
       from: ,
       localField: ,
       foreignField: ,
       as: 
     }
}

Hàm $lookup lấy một tài liệu có các trường này

FieldsDescriptionfromIt chỉ định bộ sưu tập trong cùng một cơ sở dữ liệu để thực hiện phép nối với. localFieldĐiều này được sử dụng để 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. ForeignFieldĐiều này được sử dụng để khớp bình đẳng trên ForeignField với localField từ các tài liệu đầu vào. asTrong phần này, chúng tôi chỉ định tên của trường mảng mới để thêm vào tài liệu đầu vào và trường mảng mới chứa các tài liệu phù hợp từ bộ sưu tập

Đây là một số trường mà chúng ta phải sử dụng khi sử dụng hàm $lookup

Đọc. Nhập CSV vào MongoDB

MongoDB tham gia hai bộ sưu tập

Trong MongoDB, chúng tôi sử dụng hàm $lookup(aggregation) để nối hai tập hợp. Chức năng này cho phép chúng tôi tham gia các tài liệu của các bộ sưu tập nằm trong cùng một cơ sở dữ liệu. Bạn sẽ hiểu rõ hơn với sự trợ giúp của các ví dụ

Thí dụ

Trong ví dụ này, chúng tôi tạo tập dữ liệu mẫu và chèn một số tài liệu

db.address.insertMany(
    [
        {
            "name": "Bob",
            "blk_no": 22,
            "street" : "dewey street",
            "city" : "United States of America"
        },
        {
            "name": "Jack",
            "blk_no": 25,
            "street" : "gordon street",
            "city" : "New Zealand"
        }
    ]
);
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("613594cdb59313217373673c"),
                ObjectId("613594cdb59313217373673d")
        ]
}

Chúng tôi đã chèn một số tài liệu vào bộ sưu tập địa chỉ

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

db.userInfo.insertMany(
    [
        {
            "contact_name": "Bob",
            "age": 27,
            "sex" : "male",
            "citizenship" : "Filipino"
        },
        {
            "contact_name": "Jack",
            "age": 22,
            "sex" : "male",
            "citizenship" : "Filipino"
        }
    ]
);
{
        "acknowledged" : true,
        "insertedIds" : [
                ObjectId("613594dbb59313217373673e"),
                ObjectId("613594dbb59313217373673f")
        ]
}

Ở đây, chúng tôi đã chèn một số tài liệu vào bộ sưu tập userInfo

Lưu ý rằng, trường tên trong bộ sưu tập địa chỉ có cùng giá trị với contact_name trong bộ sưu tập userInfo

Bây giờ, chúng ta áp dụng hàm $lookup và tìm kết quả là một phép so khớp đẳng thức

db.userInfo.aggregate([
    { $lookup:
        {
           from: "address",
           localField: "contact_name",
           foreignField: "name",
           as: "address"
        }
    }
]).pretty();

đầu ra

{
        "_id" : ObjectId("613594dbb59313217373673e"),
        "contact_name" : "Bob",
        "age" : 27,
        "sex" : "male",
        "citizenship" : "Filipino",
        "address" : [
                {
                        "_id" : ObjectId("613594cdb59313217373673c"),
                        "name" : "Bob",
                        "blk_no" : 22,
                        "street" : "dewey street",
                        "city" : "United States of America"
                }
        ]
}
{
        "_id" : ObjectId("613594dbb59313217373673f"),
        "contact_name" : "Jack",
        "age" : 22,
        "sex" : "male",
        "citizenship" : "Filipino",
        "address" : [
                {
                        "_id" : ObjectId("613594cdb59313217373673d"),
                        "name" : "Jack",
                        "blk_no" : 25,
                        "street" : "gordon street",
                        "city" : "New Zealand"
                }
        ]
}

Ở đây, bạn có thể thấy trong kết quả đầu ra, chúng ta nối hai tập hợp trong đó chúng ta so khớp đẳng thức trong trường tên và tên liên hệ. Đây là cách đơn giản nhất để nối hai bộ sưu tập của cùng một cơ sở dữ liệu

Đọc. Bộ sưu tập thả MongoDB

Cách MongoDB tham gia hai bộ sưu tập với mệnh đề where?

Trong MongoDB, để nối hai collection với mệnh đề where thì chúng ta sử dụng phương thức composite(). Điều này sẽ cho phép chúng tôi tương quan truy vấn con giữa hai bộ sưu tập

Chúng tôi cũng sử dụng toán tử đường ống để áp dụng điều kiện. Hãy hiểu với sự giúp đỡ của một ví dụ

Thí dụ

Trong ví dụ này, chúng tôi tạo hai bộ sưu tập khác nhau và sau đó, chúng tôi tham gia bằng cách sử dụng tổng hợp tra cứu $ bằng cách áp dụng mệnh đề where

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
MongoDB chèn tài liệu vào bộ sưu tập

Ở đây, chúng tôi tạo hai bộ sưu tập đơn đặt hàng và nhà kho và lưu trữ một số tài liệu trong đó. Bây giờ, chúng tôi áp dụng hoạt động tổng hợp để tham gia cả hai bộ sưu tập

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
MongoDB tham gia hai bộ sưu tập với mệnh đề where

Bạn có thể thấy đối với điều kiện mệnh đề where, chúng ta sử dụng hàm đường ống và áp dụng điều kiện để kiểm tra stock_item bằng order_item và sau đó nếu lượng hàng trong kho lớn hơn order_qty thì cộng với mặt hàng đó dưới dạng dữ liệu kho

Đây là cách đơn giản nhất để áp dụng mệnh đề where với nối các tập hợp. Có một số cách khác để làm điều này mà bạn có thể học hỏi từ chính mình bằng cách thực hành nhiều hơn

Đọc. Cách lưu trữ hình ảnh trong MongoDB

MongoDB tham gia hai bộ sưu tập của một mảng

Trong MongoDB, Hàm $lookup được sử dụng để nối hai tập hợp của một mảng khi localField là một mảng, bạn so khớp các phần tử mảng với ForeignFields mà không cần giai đoạn $unwind

Thí dụ

Trong ví dụ này, chúng tôi tạo hai bộ sưu tập khác nhau và lưu trữ một số tài liệu

> db.classes.find()
{ "_id" : 1, "title" : "Reading is ...", "enrollmentlist" : [ "tom", "peter", "arky" ], "days" : [ "M", "W", "F" ] }
{ "_id" : 2, "title" : "But Writing ...", "enrollmentlist" : [ "sam", "arky" ], "days" : [ "T", "F" ] }

Ở đây, chúng tôi đã chèn một số tài liệu vào bộ sưu tập các lớp

>  db.members.find()
{ "_id" : 1, "name" : "arky", "joined" : ISODate("2019-05-01T00:00:00Z"), "status" : "A" }
{ "_id" : 2, "name" : "kim", "joined" : ISODate("2020-05-01T00:00:00Z"), "status" : "D" }
{ "_id" : 3, "name" : "sam", "joined" : ISODate("2020-10-01T00:00:00Z"), "status" : "A" }
{ "_id" : 4, "name" : "panda", "joined" : ISODate("2021-10-11T00:00:00Z"), "status" : "A" }
{ "_id" : 5, "name" : "peter", "joined" : ISODate("2021-12-01T00:00:00Z"), "status" : "A" }
{ "_id" : 6, "name" : "tom", "joined" : ISODate("2021-12-01T00:00:00Z"), "status" : "D" }

Đây, đây là một số tài liệu chúng tôi đã đưa vào bộ sưu tập của các thành viên. Bây giờ, chúng ta áp dụng phép toán tổng hợp và nối các tài liệu của tập hợp thành viên với tập hợp lớp

db.classes.aggregate([
   {
      $lookup:
         {
            from: "members",
            localField: "enrollmentlist",
            foreignField: "name",
            as: "enrollee_info"
        }
   }
])

Ở đây, chúng tôi áp dụng tổng hợp tra cứu $ trên bộ sưu tập thành viên bằng cách sử dụng danh sách đăng ký trường của một mảng và hợp nhất hai bộ sưu tập với tên ForeignField và hiển thị đầu ra bên dưới

đầu ra

________số 8

Vì vậy, khi bạn có một mảng các trường trong tài liệu và bạn muốn hợp nhất các bộ sưu tập thì theo cách này, bạn có thể dễ dàng tham gia các bộ sưu tập

Đọc. Nhóm MongoDB theo số lượng

MongoDB tham gia hai bộ sưu tập theo id

Trong chủ đề này, bạn sẽ tìm hiểu cách nối hai bộ sưu tập theo id. Như bạn đã biết rằng để tham gia bộ sưu tập, chúng tôi sử dụng tổng hợp tra cứu $

Ở đây, tôi sẽ giải quyết một ví dụ giúp bạn hiểu cách tham gia bộ sưu tập theo id của họ trong MongoDB

Thí dụ

Trong ví dụ này, chúng tôi tạo hai bộ sưu tập khác nhau và sau đó, chúng tôi tham gia bộ sưu tập theo id

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
MongoDB chèn tài liệu vào bộ sưu tập

Ở đây, chúng tôi đã tạo hai bộ sưu tập đơn đặt hàng và mặt hàng và chèn một số tài liệu vào chúng

Bây giờ, chúng tôi áp dụng thao tác tổng hợp $lookup để tham gia cả hai bộ sưu tập theo id của chúng

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
MongoDB tham gia hai bộ sưu tập theo id của họ

Như bạn đã biết, sẽ có mối quan hệ 1-1, bạn có thể hủy các kết quả tra cứu $ để có một mục được nhúng cho nhau. Sau đó, điều này sẽ hiển thị đầu ra bằng cách hợp nhất bộ sưu tập theo id của họ

Đọc. Nhập JSON và chèn JSON vào MongoDB

Cách MongoDB tham gia hai bộ sưu tập bằng cách sử dụng la bàn

Trong la bàn MongoDB, Để tham gia hai bộ sưu tập cơ sở dữ liệu, chúng tôi sử dụng chức năng tổng hợp tra cứu $. Nếu bạn muốn xem cách chúng tôi có thể thực hiện thì bạn sẽ hiểu rõ hơn với sự trợ giúp của một ví dụ

Thí dụ

Trong ví dụ này, chúng ta sẽ tìm hiểu cách sử dụng $lookup aggregation trong MongoDB compass để hợp nhất hai bộ sưu tập cơ sở dữ liệu

Bây giờ, hãy làm theo các bước dưới đây để áp dụng thao tác tổng hợp trong la bàn

  • Mở la bàn MongoDB

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mở la bàn MongoDB

  • Tạo cơ sở dữ liệu và bộ sưu tập mới nếu bạn muốn

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Cách MongoDB tham gia hai bộ sưu tập bằng cách sử dụng la bàn

Ở đây, tôi đã tạo hai bộ sưu tập gen và phim vào cơ sở dữ liệu thử nghiệm và cũng đã chèn một số tài liệu vào cả hai bộ sưu tập

  • Bây giờ chúng tôi áp dụng chức năng tổng hợp để hợp nhất cả bộ sưu tập
  • Nhấp vào Tổng hợp bên phải của Tài liệu

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Áp dụng tổng hợp tra cứu $ bằng la bàn MongoDB

Sau khi chọn tổng hợp ở dưới cùng, có một “giai đoạn quy trình”, nơi có danh sách thả xuống và nơi bạn phải chọn thao tác mà bạn muốn thực hiện và ở đây chúng tôi chọn chức năng tra cứu $

Trong chức năng này, bạn phải cung cấp một số trường của bộ sưu tập. Trong trường từ, hãy viết tên bộ sưu tập mà bạn muốn tham gia (phim) và trong localField và ForeignField, hãy viết trường của bộ sưu tập cục bộ (danh sách thể loại) và trường “bộ sưu tập dạng” (loại) tương ứng và trong trường mảng đầu ra ghi (phim)

  • Sau khi áp dụng tổng hợp, bạn có thể thấy đầu ra bên phải của đầu vào

Đây là cách đơn giản nhất để áp dụng tổng hợp tra cứu $ bằng la bàn MongoDB. Bây giờ, nếu bạn thực hành nhiều hơn với MongoDB la bàn thì bạn sẽ hiểu rõ hơn về các thao tác tổng hợp và quen thuộc hơn với môi trường la bàn

Đọc. Cách kiểm tra xem MongoDB đã được cài đặt chưa + Phiên bản MongoDB

MongoDB tham gia hai bộ sưu tập từ cơ sở dữ liệu khác nhau

Trong MongoDB, khi chúng tôi tham gia hai bộ sưu tập trong cùng một cơ sở dữ liệu thì chúng tôi thực hiện với sự trợ giúp của $lookup aggregation. Thao tác này sẽ tạo một liên kết bên ngoài bên trái với một tập hợp khác và hỗ trợ lọc các tài liệu từ các tài liệu đã tham gia

Nhưng không có khái niệm nối hai bộ sưu tập từ các cơ sở dữ liệu khác nhau trong MongoDB nên chúng tôi không thể nối chúng

Đọc. MongoDB sắp xếp theo ngày

MongoDB tham gia hai bộ sưu tập bằng python

Trong python, chúng ta cũng có thể thực hiện các thao tác tổng hợp MongoDB. Việc sử dụng thao tác tổng hợp là kết hợp đồng thời các giá trị của nhiều tài liệu và thực hiện nhiều thao tác khác nhau trên dữ liệu nhóm

Ở đây, chúng ta tìm hiểu cách tham gia hai bộ sưu tập của cùng một cơ sở dữ liệu bằng python

Thí dụ

Trong ví dụ này, chúng tôi tham gia hai bộ sưu tập bằng python

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
MongoDB chèn tài liệu vào bộ sưu tập

Ở đây, chúng tôi đã tạo cửa hàng tạp hóa và lưu trữ hai bộ sưu tập trước đó và chèn một số tài liệu vào chúng

Bây giờ, hãy áp dụng tổng hợp tra cứu $ và tham gia cả hai bộ sưu tập bằng python

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
MongoDB tham gia hai bộ sưu tập bằng cách sử dụng python

Ở đây trước tiên, chúng tôi tạo kết nối giữa Python và MongoDB bằng cách sử dụng thư viện pymongo. Sau đó, truy cập cơ sở dữ liệu bằng cách sử dụng lớp myclient và sau đó sử dụng tổng hợp tra cứu $ để tham gia bộ sưu tập như chúng ta đã thực hiện trong cơ sở dữ liệu MongoDB. Điều này sẽ hiển thị đầu ra sau

đầu ra

Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Mongodb có hỗ trợ tham gia truy vấn giữa các bộ sưu tập không?
Đầu ra sau khi nối hai bộ sưu tập
bằng python

Bằng cách này, bạn có thể tham gia các bộ sưu tập cơ sở dữ liệu bằng cách sử dụng python

Bạn cũng có thể thích đọc các bài viết sau

  • MongoDB sắp xếp theo lĩnh vực
  • Tạo bảng trong MongoDB
  • Ưu và nhược điểm của MongoDB
  • MongoDB cập nhật tài liệu
  • Xuất MongoDB sang CSV
  • MongoDB không được công nhận là lệnh nội bộ hoặc bên ngoài

Trong hướng dẫn này, bạn đã học Cách kết hợp hai bộ sưu tập vào MongoDB trong các thao tác khác nhau với các ví dụ. Đây là những chủ đề sau mà chúng tôi đã đề cập trong hướng dẫn này

  • Cái gì được sử dụng để tham gia bộ sưu tập trong MongoDB?
  • MongoDB tham gia hai truy vấn bộ sưu tập
  • MongoDB tham gia hai bộ sưu tập
  • Cách MongoDB tham gia hai bộ sưu tập với mệnh đề where
  • MongoDB tham gia hai bộ sưu tập với một mảng
  • MongoDB tham gia hai bộ sưu tập theo id
  • Cách MongoDB tham gia hai bộ sưu tập bằng cách sử dụng la bàn
  • MongoDB tham gia hai bộ sưu tập từ cơ sở dữ liệu khác nhau
  • MongoDB tham gia hai bộ sưu tập bằng python

Bijay

Tôi là Bijay có hơn 15 năm kinh nghiệm trong ngành công nghiệp phần mềm. Trong thời gian này, tôi đã làm việc trên MariaDB và sử dụng nó trong rất nhiều dự án. Hầu hết độc giả của chúng tôi đến từ Hoa Kỳ, Canada, Vương quốc Anh, Úc, New Zealand, v.v.

Bạn muốn tìm hiểu MariaDB? . Ngoài ra, tôi là MVP của Microsoft

Làm cách nào để tham gia hai bộ sưu tập trong truy vấn MongoDB?

Thao tác THAM GIA MongoDB với hai bộ sưu tập được thực hiện bằng cách sử dụng toán tử tra cứu $ được phát triển có phiên bản 3. 2. Toán tử $lookup tiến hành một tài liệu có các trường bên dưới. Từ. Nó nêu bộ sưu tập trong cơ sở dữ liệu giống hệt nhau để thực hiện phép nối với nhưng với Hạn chế bộ sưu tập được chia nhỏ

Tại sao phép nối không được sử dụng trong MongoDB?

Không tham gia vì mối quan hệ sẽ chỉ được đánh giá khi cần thiết . Mặt khác, một phép nối (trong cơ sở dữ liệu SQL) sẽ giải quyết các mối quan hệ và trả về chúng như thể chúng là một bảng duy nhất (bạn "nối hai bảng thành một").

Làm cách nào để lấy dữ liệu từ bộ sưu tập này sang bộ sưu tập khác trong MongoDB?

Trong MongoDB, phương thức copyTo() được sử dụng để sao chép tất cả tài liệu từ một bộ sưu tập (Bộ sưu tập nguồn) sang bộ sưu tập khác (Bộ sưu tập đích .

MongoDB có hỗ trợ truy vấn phạm vi không?

Chỉ mục lưu trữ giá trị của một trường cụ thể hoặc tập hợp các trường, được sắp xếp theo giá trị của trường. Thứ tự của các mục nhập chỉ mục hỗ trợ khớp đẳng thức hiệu quả và các hoạt động truy vấn dựa trên phạm vi. Ngoài ra, MongoDB có thể trả về kết quả được sắp xếp bằng cách sử dụng thứ tự trong chỉ mục