Hướng dẫn how do i link two tables in mongodb? - làm cách nào để liên kết hai bảng trong mongodb?

Chúng tôi có thể hợp nhất/tham gia tất cả dữ liệu bên trong chỉ một bộ sưu tập có chức năng dễ dàng trong một vài dòng sử dụng bảng điều khiển máy khách MongoDB và bây giờ chúng tôi có thể thực hiện truy vấn mong muốn. Dưới một ví dụ hoàn chỉnh,

.- Các tác giả:

db.authors.insert([
    {
        _id: 'a1',
        name: { first: 'orlando', last: 'becerra' },
        age: 27
    },
    {
        _id: 'a2',
        name: { first: 'mayra', last: 'sanchez' },
        age: 21
    }
]);

.- Thể loại:

db.categories.insert([
    {
        _id: 'c1',
        name: 'sci-fi'
    },
    {
        _id: 'c2',
        name: 'romance'
    }
]);

.- Sách

db.books.insert([
    {
        _id: 'b1',
        name: 'Groovy Book',
        category: 'c1',
        authors: ['a1']
    },
    {
        _id: 'b2',
        name: 'Java Book',
        category: 'c2',
        authors: ['a1','a2']
    },
]);

.- Cho vay sách

db.lendings.insert([
    {
        _id: 'l1',
        book: 'b1',
        date: new Date('01/01/11'),
        lendingBy: 'jose'
    },
    {
        _id: 'l2',
        book: 'b1',
        date: new Date('02/02/12'),
        lendingBy: 'maria'
    }
]);

.- Phép thuật:

db.books.find().forEach(
    function (newBook) {
        newBook.category = db.categories.findOne( { "_id": newBook.category } );
        newBook.lendings = db.lendings.find( { "book": newBook._id  } ).toArray();
        newBook.authors = db.authors.find( { "_id": { $in: newBook.authors }  } ).toArray();
        db.booksReloaded.insert(newBook);
    }
);

.- Nhận dữ liệu bộ sưu tập mới:

db.booksReloaded.find().pretty()

.- Phản ứng :)

{
    "_id" : "b1",
    "name" : "Groovy Book",
    "category" : {
        "_id" : "c1",
        "name" : "sci-fi"
    },
    "authors" : [
        {
            "_id" : "a1",
            "name" : {
                "first" : "orlando",
                "last" : "becerra"
            },
            "age" : 27
        }
    ],
    "lendings" : [
        {
            "_id" : "l1",
            "book" : "b1",
            "date" : ISODate("2011-01-01T00:00:00Z"),
            "lendingBy" : "jose"
        },
        {
            "_id" : "l2",
            "book" : "b1",
            "date" : ISODate("2012-02-02T00:00:00Z"),
            "lendingBy" : "maria"
        }
    ]
}
{
    "_id" : "b2",
    "name" : "Java Book",
    "category" : {
        "_id" : "c2",
        "name" : "romance"
    },
    "authors" : [
        {
            "_id" : "a1",
            "name" : {
                "first" : "orlando",
                "last" : "becerra"
            },
            "age" : 27
        },
        {
            "_id" : "a2",
            "name" : {
                "first" : "mayra",
                "last" : "sanchez"
            },
            "age" : 21
        }
    ],
    "lendings" : [ ]
}

Tôi hy vọng dòng này có thể giúp bạn.

Hướng dẫn how do i link two tables in mongodb? - làm cách nào để liên kết hai bảng trong mongodb?

Định nghĩa trên MongoDB Tham gia hai bộ sưu tập

MongoDB là cơ sở dữ liệu NoQuery là một trong những tài liệu thông thường nhất có thể truy cập và lưu trữ cả như một dịch vụ đám mây được kiểm soát hoàn toàn và cũng để triển khai cơ sở hạ tầng tự quản lý. & NBSP; vì MongoDB không phải là loại RDBMS, nhưng vẫn có thể thực thi người dùng Một bên ngoài bên ngoài tham gia bằng giai đoạn tra cứu $. Giai đoạn này $ Tra cứu cho phép bạn nêu bộ sưu tập nào người dùng cần tham gia với bộ sưu tập hiện tại và cả các trường phải phù hợp.

Trong MongoDB, rất khó để liên kết dữ liệu từ bộ sưu tập này sang bộ sưu tập khác, không bao gồm khi sử dụng các hàm truy vấn tập lệnh cơ bản được sử dụng. Do đó, để giải quyết vấn đề này, khái niệm tham gia được giới thiệu tạo điều kiện cho mối quan hệ dữ liệu. Hoạt động tham gia MongoDB với hai bộ sưu tập được thực hiện bằng cách sử dụng nhà điều hành tra cứu $ được phát triển có phiên bản 3.2.

Syntax:

Khái niệm chính đằng sau hoạt động tham gia MongoDB là đạt được mối tương quan giữa một dữ liệu thu thập với một dữ liệu khác. Điều này được thực hiện bằng cách sử dụng toán tử tra cứu $, vì vậy, cú pháp cơ bản cho việc này tham gia hai bộ sưu tập có thể được xác định như sau:

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

Toán tử tra cứu $ tiến hành một tài liệu có các trường dưới đây:

  • Từ: Nó nêu bộ sưu tập trong cơ sở dữ liệu giống hệt nhau để thực hiện tham gia với nhưng với các hạn chế thu thập Sharded.
  • LocalField: Nó nêu rõ trường từ các tài liệu nhập vào giai đoạn của $ Tra cứu hoạt động một trận đấu tương đương trên trường địa phương với trường nước ngoài từ các tài liệu của bộ sưu tập từ. Khi một tài liệu đầu vào không có giá trị trường cục bộ thì toán tử này sẽ cung cấp cho trường để có giá trị null cho các mục đích phù hợp hơn nữa.
  • TIẾNG VIỆT: Nó nêu rõ trường từ các tài liệu trong bộ sưu tập ‘từ bộ sưu tập hoạt động phù hợp tương đương trên trường nước ngoài với localfield từ các tài liệu đầu vào. Khi một tài liệu trong bộ sưu tập ‘từ Hồi không có giá trị cho trường nước ngoài thì nhà điều hành này sẽ cung cấp cho trường để có giá trị null cho các mục đích phù hợp hơn nữa.
  • AS: Nó nêu tên của trường mảng mới để thêm vào các tài liệu đầu vào. Ngoài ra, trường Array mới bao gồm các tài liệu phù hợp từ bộ sưu tập từ từ. Nhưng khi tên đã nêu đã chiếm ưu thế trong tài liệu đầu vào thì trường phổ biến sẽ được ghi đè.

Trong trường hợp của khái niệm SQL, kết quả của một hoạt động tham gia luôn là một hàng khác nhau liên kết tất cả các trường có từ các bảng cha mẹ và nước ngoài. Nhưng trong MongoDB, trường hợp là biến thể trong đó các tài liệu đầu ra được bổ sung như một mảng các tài liệu thu thập gốc.

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

Để tham gia các bộ sưu tập MongoDB, chúng tôi yêu cầu triển khai nhà điều hành là $ Tra cứu, được định nghĩa là một giai đoạn thực hiện tham gia bên ngoài bên trái với bộ sưu tập khác và cũng hỗ trợ để lọc thông tin dữ liệu từ các tài liệu đã tham gia. Giả sử người dùng cần tìm nạp tất cả các học sinh có điểm, sau đó truy vấn dưới đây có thể được viết:
Suppose a user needs to fetch all the students with grades, then the below query can be written:

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

Chúng ta có thể thấy trong truy vấn ở trên rằng tham số ban đầu có tên 'từ' nói rằng bộ sưu tập sẽ được nối với cái hiện tại, ở phía bên kia tham số 'LocalField' nêu rõ khóa trong bộ sưu tập hiện tại sẽ được khớp với chìa khóa nước ngoài trong một bộ sưu tập khác bằng tham số 'nước ngoài'. Tại đây, student_id từ học sinh và stud_id từ các lớp được khớp cũng như tham gia để truy xuất dữ liệu. Ngoài ra, tham số cuối ‘As, được thêm vào tên mã được đặt tên vào dữ liệu.

Cần lưu ý rằng ở đây trong mỗi bản ghi kết quả từ tra cứu, cũng là dữ liệu từ bảng được nối xuất hiện bên trong một mảng là phần tử chính, mỗi một hàng từ dữ liệu đầu ra của truy vấn ở trên sẽ hiển thị như vậy,

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

Ở đây, trong mảng điểm, phần tử ban đầu sẽ là dữ liệu mà truy vấn đã tham gia.

Thí dụ

Chúng ta hãy minh họa một vài ví dụ để hiển thị sự tham gia của hai bộ sưu tập ở MongoDB được giải thích như sau: Giả sử chúng ta có hai bộ sưu tập được tạo ra có tên là sinh viên và nhãn hiệu như,
Suppose we have two collections created named students and marks as,

Students:

db.categories.insert([
    {
        _id: 'c1',
        name: 'sci-fi'
    },
    {
        _id: 'c2',
        name: 'romance'
    }
]);
0

Hướng dẫn how do i link two tables in mongodb? - làm cách nào để liên kết hai bảng trong mongodb?

Marks:

db.categories.insert([
    {
        _id: 'c1',
        name: 'sci-fi'
    },
    {
        _id: 'c2',
        name: 'romance'
    }
]);
1

Hướng dẫn how do i link two tables in mongodb? - làm cách nào để liên kết hai bảng trong mongodb?

Chúng ta có thể tìm nạp các điểm học sinh với các điểm tương ứng bằng toán tử tra cứu $ bằng phương pháp tham gia được xác định dưới đây:

db.categories.insert([
    {
        _id: 'c1',
        name: 'sci-fi'
    },
    {
        _id: 'c2',
        name: 'romance'
    }
]);
2

Khi thực hiện, đầu ra sẽ cung cấp các kết quả sau,

db.categories.insert([
    {
        _id: 'c1',
        name: 'sci-fi'
    },
    {
        _id: 'c2',
        name: 'romance'
    }
]);
3

Hướng dẫn how do i link two tables in mongodb? - làm cách nào để liên kết hai bảng trong mongodb?

Cấu trúc của truy vấn bằng văn bản có thể quyết định thời lượng hiệu suất. Ví dụ, khi có một số tài liệu trong một bộ sưu tập khác, thì cần phải tổng hợp từ một bộ sưu tập với các tài liệu nhỏ hơn, sau đó tra cứu trong một bộ phận có nhiều tài liệu khác nhau. Loại tra cứu này được thực hiện cho trường đã chọn từ bộ sưu tập tài liệu nhỏ hơn khá tốt nhất và tiến hành thời gian nhỏ hơn so với thực hiện nhiều lần tra cứu cho một trường được chọn trong bộ sưu tập có nhiều tài liệu khác nhau. Vì vậy, nó là hợp lý để đặt bộ sưu tập nhỏ hơn ban đầu.

Nhưng thứ tự của cơ sở dữ liệu không gặp rắc rối trong trường hợp cơ sở dữ liệu quan hệ là tối đa của các phiên dịch SQL bao gồm các trình tối ưu hóa cung cấp quyền truy cập vào thông tin bổ sung để chọn cái nào phải là thông tin chính.

Trong MongoDB này, để đơn giản hóa hoạt động tham gia, chúng tôi có thể yêu cầu thực hiện một chỉ mục. Vì tất cả các tài liệu MongoDB bao gồm khóa _ID mà DBM quan hệ được đo là khóa chính. Một chỉ mục cung cấp cơ hội tốt hơn để giảm thiểu số lượng dữ liệu cần được truy xuất bên cạnh việc liên kết hoạt động khi được áp dụng trong khóa nước ngoài $ Lookup.

Sự kết luận

Toán tử tham gia là một trong những tính năng đặc biệt cơ bản có sẵn giữa cơ sở dữ liệu SQL và cơ sở dữ liệu NoQuery.Trong cơ sở dữ liệu SQL, người dùng có thể thực hiện thao tác tham gia giữa hai bảng bên trong cơ sở dữ liệu giống hệt nhau hoặc khác nhau.

Trong khi trường hợp trong MongoDB cho tham gia rất đa dạng, MongoDB cho phép các hoạt động tham gia thực hiện giữa hai bộ sưu tập được thực hiện trong một cơ sở dữ liệu tương tự.

Bài viết đề xuất

Đây là một hướng dẫn để MongoDB tham gia hai bộ sưu tập.Ở đây chúng tôi thảo luận về định nghĩa, làm thế nào để tham gia hai bộ sưu tập trong MongoDB?cùng với các ví dụ tương ứng.Bạn cũng có thể xem các bài viết sau để tìm hiểu thêm -

  1. MongoDB tham gia
  2. Tập đoàn MongoDB bởi
  3. Nhập khẩu MongoDB
  4. MongoDB Sharding