Bạn có thể có bao nhiêu bộ sưu tập trong mongodb?

MongoDB là một Hệ thống quản lý cơ sở dữ liệu phi quan hệ, là Nguồn mở và Đa nền tảng. MongoDB, được thành lập năm 2009, sử dụng Mô hình cơ sở dữ liệu hướng tài liệu để tổ chức dữ liệu thành các tài liệu và bộ sưu tập thay vì bảng. Điều này cho phép nó lưu trữ các loại dữ liệu khác nhau. Hơn nữa, nó được phân phối theo Giấy phép Công cộng Phía Máy chủ (SSPL), hỗ trợ cơ chế mới để lưu trữ và truy xuất lượng lớn dữ liệu. MongoDB là một cơ sở dữ liệu đơn giản và dễ cấu hình, cung cấp hiệu suất cao, khả năng mở rộng tự động và tính sẵn sàng cao

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

MongoDB gặp một số vấn đề với việc liên kết dữ liệu từ bộ sưu tập này sang bộ sưu tập khác trừ khi bạn sử dụng các chức năng Truy vấn tập lệnh đơn giản. Để giải quyết vấn đề này, chúng tôi giới thiệu khái niệm THAM GIA, tạo điều kiện thuận lợi cho mối quan hệ giữa dữ liệu

Chúng ta có thể tham gia các tài liệu trên các bộ sưu tập trong MongoDB bằng cách sử dụng hàm $lookup (Aggregation). $lookup(Aggregation) tạo liên kết ngoài cùng bên trái với một tập hợp khác và giúp lọc dữ liệu khỏi dữ liệu đã hợp nhất. Nếu các tài liệu là một phần của bộ sưu tập “đã tham gia”, hàm $lookup (Tổng hợp) sẽ trả về các tài liệu ở dạng một mảng con của bộ sưu tập gốc

cú pháp

Trong hoạt động THAM GIA của MongoDB, mục tiêu là kết nối một tập hợp dữ liệu với một tập hợp dữ liệu khác. Để nối hai tập hợp, chúng tôi sử dụng toán tử tra cứu $, có cú pháp được định nghĩa bên dưới

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

Hàm $lookup chấp nhận một tài liệu chứa các trường này

  • Từ. Nó mô tả bộ sưu tập trong một cơ sở dữ liệu giống hệt nhau sẽ được sử dụng để thực hiện phép nối, nhưng với các hạn chế về bộ sưu tập được phân đoạn
  • Trường địa phương. Trường này đại diện cho trường đầu vào từ tài liệu đến giai đoạn tra cứu $, thực hiện khớp tương đương giữa trường cục bộ và trường nước ngoài từ bộ sưu tập 'từ. ' Nếu một tài liệu đầu vào không có giá trị cho trường cục bộ, thì toán tử này sẽ cung cấp cho trường giá trị null cho các mục đích phù hợp
  • vùng ngoại quốc. Trường này chứa dữ liệu từ các tài liệu trong bộ sưu tập 'từ' có thể thực hiện khớp tương đương giữa ForeignField và localField. Khi một tài liệu trong bộ sưu tập 'từ' không có giá trị ForeignField, toán tử này sẽ đặt trường thành null cho các mục đích đối sánh tiếp theo
  • BẰNG. Nó chỉ định tên của trường mảng cần được thêm vào tài liệu đầu vào. Hơn thế nữa, một trường mảng mới cũng bao gồm các tài liệu phù hợp từ bộ sưu tập ‘từ. ' Trường phổ biến sẽ bị ghi đè nếu tên đã nêu đã tồn tại trong tài liệu đầu vào

Trong SQL, khi thao tác THAM GIA được thực hiện, kết quả luôn là một hàng mới kết hợp tất cả các trường có từ bảng mẹ và bảng ngoại. Tuy nhiên, trong MongoDB, các tài liệu đầu ra được bổ sung bởi một loạt các tài liệu bộ sưu tập gốc

Các bước để tham gia hai bộ sưu tập 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

Students.aggregate([{
$lookup: {
From: ‘Grades’,
LocalField: ‘Student_id’,
foreignField: ‘Stud_id’,
as: ‘Student_grade’
}}]);

Từ truy vấn trên, chúng ta có thể thấy rằng tham số ban đầu có tên 'từ' chỉ định bộ sưu tập sẽ được kết hợp với bộ sưu tập hiện tại và 'localField' chỉ định khóa trong bộ sưu tập hiện tại, sẽ được khớp với bộ sưu tập nước ngoài . Để truy xuất dữ liệu, Student_id từ Học sinh và stud_id từ Điểm được khớp và nối. Ngoài ra, tham số kết thúc 'as' được thêm dưới dạng tên mã vào dữ liệu

Điều đáng chú ý là ở đây, trong mỗi bản ghi dữ liệu đầu ra từ truy vấn trên, dữ liệu từ bảng đã nối cũng xuất hiện dưới dạng phần tử chính trong một mảng. Tương tự, mỗi hàng từ dữ liệu đầu ra từ truy vấn trên sẽ hiển thị như sau

{_ID: String, Quantity: Number, Student_id: String, Student_grade: Array, Stud_id: String, Student_name: String}

Dữ liệu được tham gia bởi truy vấn sẽ là phần tử đầu tiên trong mảng điểm

Ví dụ

Ví dụ sau tạo tập dữ liệu mẫu và chèn một số tài liệu để thực hiện MongoDB Tham gia hai bộ sưu tập

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")
        ]
}

Một vài tài liệu đã được chèn vào bộ sưu tập địa chỉ. Bây giờ hãy thêm một vài 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")
        ]
}

Bộ sưu tập userInfo đã được phổ biến với một số tài liệu

Điều quan trọng cần lưu ý là trường tên trong bộ sưu tập địa chỉ có cùng giá trị với trường contact_name trong bộ sưu tập userInfo

Áp dụng hàm $lookup ta tìm được cặp đẳng thức như sau

098db.userInfo.aggregate([
    { $lookup:
        {
           from: "address",
           localField: "contact_name",
           foreignField: "name",
           as: "address"
        }
    }
]).pretty();
Output:
{
        "_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"
                }
        ]
}

Chúng tôi khớp trường tên và trường contact_name của hai bộ sưu tập này. Sau đó, bạn có thể thấy đầu ra nơi chúng tôi đã tham gia hai bộ sưu tập. Đây là cách đơn giản nhất để thực hiện MongoDB tham gia hai bộ sưu tập từ cùng một cơ sở dữ liệu

Đơn giản hóa MongoDB ETL & Phân tích bằng Đường ống dữ liệu không mã của Hevo

Dữ liệu Hevo là Đường ống dữ liệu không có mã cung cấp giải pháp được quản lý hoàn toàn để thiết lập Tích hợp dữ liệu cho hơn 100 nguồn dữ liệu (bao gồm hơn 40 nguồn miễn phí) và sẽ cho phép bạn tải trực tiếp dữ liệu từ các nguồn như MongoDB đến Kho dữ liệu hoặc Đích . Nó sẽ tự động hóa luồng dữ liệu của bạn trong vài phút mà không cần viết bất kỳ dòng mã nào. Kiến trúc chịu lỗi của nó đảm bảo rằng dữ liệu của bạn được an toàn và nhất quán. Hevo cung cấp cho bạn một giải pháp thực sự hiệu quả và hoàn toàn tự động để quản lý dữ liệu theo thời gian thực và luôn có sẵn dữ liệu để phân tích.  

Bắt đầu với Hevo miễn phí

Cùng điểm qua một số tính năng nổi bật của Hevo

  • Được quản lý hoàn toàn. Nó không yêu cầu quản lý và bảo trì vì Hevo là một nền tảng hoàn toàn tự động
  • Chuyển đổi dữ liệu. Nó cung cấp một giao diện đơn giản để hoàn thiện, sửa đổi và làm giàu dữ liệu bạn muốn chuyển.  
  • Thời gian thực. Hevo cung cấp di chuyển dữ liệu theo thời gian thực. Vì vậy, dữ liệu của bạn luôn sẵn sàng để phân tích
  • Quản lý lược đồ. Hevo có thể tự động phát hiện lược đồ của dữ liệu đến và ánh xạ nó tới lược đồ đích
  • kết nối. Hevo hỗ trợ hơn 100 Tích hợp cho nền tảng SaaS FTP/SFTP, Tệp, Cơ sở dữ liệu, công cụ BI và API REST gốc & Trình kết nối Webhooks. Nó hỗ trợ nhiều điểm đến khác nhau bao gồm Google BigQuery, Amazon Redshift, Snowflake, Firebolt, Data Warehouses; .   
  • Chắc chắn. Hevo có kiến ​​trúc chịu lỗi đảm bảo rằng dữ liệu được xử lý một cách an toàn, nhất quán và không bị mất dữ liệu
  • Hevo được xây dựng để mở rộng quy mô. Khi số lượng nguồn và khối lượng dữ liệu của bạn tăng lên, Hevo sẽ mở rộng quy mô theo chiều ngang, xử lý hàng triệu bản ghi mỗi phút với rất ít độ trễ
  • Giám sát trực tiếp. Giám sát nâng cao cung cấp cho bạn chế độ xem một cửa để theo dõi tất cả các hoạt động diễn ra trong Đường ống dữ liệu
  • Hỗ trợ trực tuyến. Nhóm Hevo luôn sẵn sàng mở rộng hỗ trợ đặc biệt cho khách hàng của mình thông qua trò chuyện, email và các cuộc gọi hỗ trợ
Đăng ký tại đây để dùng thử miễn phí 14 ngày

Cách MongoDB tham gia hai bộ sưu tập với các điều kiện cụ thể bằng cách sử dụng Đường ống & $Lookup?

$lookup được sử dụng với một đường dẫn để thực hiện MongoDB tham gia hai bộ sưu tập dựa trên các điều kiện cụ thể yêu cầu biểu thức

Chẳng hạn, nếu chúng tôi muốn nhận tất cả người dùng có đơn đặt hàng lớn hơn năm

User.aggregate([{
$lookup: {
 from: 'Orders',
 let: {ID: '$ID'},
 pipeline: [{$match: {
  $expr: {
   $eq: [
    '$User_ID', '$$ID'
   ],
   $gt: [
    '$quantity', 5
   ]
  }}}]
  as: 'OrdersData'
}}]);

Chúng ta có thể nhanh chóng tham gia các bảng bằng cách sử dụng các đường ống trong $lookup

Mongodb tham gia hai bộ sưu tập với mệnh đề Where như thế nào?

Phương thức tổng hợp () của MongoDB kết hợp hai bộ sưu tập với mệnh đề where. Bằng cách này, chúng ta có thể tương quan hai truy vấn con

Toán tử đường ống cũng được sử dụng để áp dụng điều kiện. Hãy xem ví dụ sau

Ví dụ

Trong ví dụ này, chúng tôi tạo hai tập hợp, sau đó chúng tôi áp dụng mệnh đề where để nối chúng bằng cách sử dụng tập hợp $lookup

Bạn có thể có bao nhiêu bộ sưu tập trong mongodb?
Nguồn hình ảnh

Hai bộ sưu tập, đơn đặt hàng và kho được tạo và một vài tài liệu được lưu trữ. Bây giờ chúng tôi kết hợp cả hai bộ sưu tập bằng thao tác tổng hợp

Bạn có thể có bao nhiêu bộ sưu tập trong mongodb?
Nguồn hình ảnh

Như bạn có thể thấy trong điều kiện mệnh đề where, chúng ta sử dụng hàm đường ống, gán stock_item bằng order_item, sau đó thêm stock_data nếu số lượng trong kho lớn hơn order_qty

Đây là cách đơn giản nhất để áp dụng mệnh đề where để thực hiện MongoDB Join two collections. Tuy nhiên, bạn có thể tìm hiểu những cách khác để làm điều này bằng cách thực hành nhiều hơn

Sử dụng La bàn để nối hai bộ sưu tập trong MongoDB

MongoDB Compass GUI cho phép bạn truy vấn, tổng hợp và phân tích dữ liệu MongoDB của bạn bằng môi trường trực quan.  

Hàm $lookup aggregation được sử dụng để thực hiện MongoDB Tham gia hai bộ sưu tập cho cùng một cơ sở dữ liệu

Ví dụ

Trong ví dụ này, chúng ta sẽ tìm hiểu cách kết hợp hai tập hợp cơ sở dữ liệu bằng cách sử dụng $lookup aggregation

Trong La bàn, bạn có thể áp dụng thao tác tổng hợp bằng cách thực hiện theo các bước sau

  • Mở MongoDB La bàn
Bạn có thể có bao nhiêu bộ sưu tập trong mongodb?
Nguồn hình ảnh
  • Nếu muốn, hãy tạo một bộ sưu tập và cơ sở dữ liệu mới
Bạn có thể có bao nhiêu bộ sưu tập trong mongodb?
  • Chúng tôi đã tạo hai bộ sưu tập cho chi và phim trong cơ sở dữ liệu thử nghiệm và chúng tôi 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 hợp nhất hai bộ sưu tập bằng chức năng tổng hợp
    • Trên trang Tài liệu, nhấp vào Tổng hợp
Bạn có thể có bao nhiêu bộ sưu tập trong mongodb?
Nguồn hình ảnh

Có một "giai đoạn quy trình" sau khi bạn chọn Tập hợp nơi có danh sách thả xuống và nơi bạn phải chọn thao tác nào sẽ thực hiện;

Một số trường trong bộ sưu tập cần được cung cấp trong chức năng này. Trước tiên, bạn viết tên bộ sưu tập mà bạn muốn tham gia (phim) vào trường 'từ' và viết các trường của bộ sưu tập cục bộ (danh sách thể loại) và các trường của “bộ sưu tập dạng” (loại) trong localField và

Bạn có thể thấy đầu ra ở phía bên phải của đầu vào sau khi Tổng hợp

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

Phần kết luận

Một trong những khác biệt cơ bản giữa cơ sở dữ liệu SQL và NoSQL là toán tử THAM GIA. Thao tác THAM GIA có thể được thực hiện trong cơ sở dữ liệu SQL giữa hai bảng trong cùng một cơ sở dữ liệu hoặc khác nhau. Mặt khác, các hoạt động THAM GIA trong MongoDB có thể được thực hiện giữa các bộ sưu tập được triển khai trong một cơ sở dữ liệu tương tự, mặc dù trường hợp rất khác nhau

Hướng dẫn này đã giới thiệu cho bạn một số thao tác cần thiết nhất để thực hiện MongoDB Join Two Collections với các ví dụ.  

Ghé thăm trang web của chúng tôi để khám phá Hevo

Hevo Data, Đường ống dẫn dữ liệu không mã cung cấp cho bạn giải pháp nhất quán và đáng tin cậy để quản lý truyền dữ liệu giữa nhiều nguồn khác nhau như MongoDB và nhiều Điểm đến mong muốn khác nhau, với một vài cú nhấp chuột. Hevo Data với khả năng tích hợp mạnh mẽ với hơn 100 nguồn (bao gồm hơn 40 nguồn miễn phí) cho phép bạn không chỉ xuất dữ liệu từ các nguồn dữ liệu mong muốn và tải dữ liệu đó đến đích bạn chọn mà còn chuyển đổi và làm phong phú dữ liệu của bạn để phân tích.

Bạn muốn thử Hevo? . Bạn cũng có thể xem giá cạnh tranh nhất sẽ giúp bạn chọn gói phù hợp cho nhu cầu kinh doanh của mình

MongoDB có thể có nhiều bộ sưu tập không?

Có, bạn có thể có nhiều bộ sưu tập trong một cơ sở dữ liệu ở MongoDB . Các bộ sưu tập có thể được coi là tương tự như các bảng trong cơ sở dữ liệu quan hệ.

Kích thước tối đa của bộ sưu tập trong MongoDB là bao nhiêu?

Sharding hạn chế hoạt động

MongoDB có thể xử lý bao nhiêu bản ghi?

Mongo Atlas có thể dễ dàng đối phó với việc cập nhật bản ghi dưới 1 triệu .

Cơ sở dữ liệu có thể có nhiều bộ sưu tập không?

Một cơ sở dữ liệu có thể chứa nhiều bộ sưu tập , nhưng một bộ sưu tập không thể trải rộng trên nhiều cơ sở dữ liệu. Tương tự như vậy, một bộ sưu tập có thể chứa nhiều tài liệu, nhưng một tài liệu không thể trải rộng trên nhiều bộ sưu tập.