Hướng dẫn are relations possible in mongodb? - các mối quan hệ có thể có trong mongodb không?

Tài liệu về nhà → Hướng dẫn sử dụng MongoDBMongoDB Manual

Mô hình các mối quan hệ một-một với các tài liệu nhúng có mô hình dữ liệu sử dụng các tài liệu nhúng để mô tả các mối quan hệ một-một giữa dữ liệu được kết nối. Mối quan hệ trực tiếp giữa dữ liệu được kết nối. Modelel Mối quan hệ một-nhiều với tài liệu tham khảo Một mô hình dữ liệu sử dụng các tài liệu tham khảo để mô tả các mối quan hệ một-nhiều giữa các tài liệu.

Hiểu các mối quan hệ tài liệu

Mối quan hệ thực thi tính toàn vẹn dữ liệu trong cơ sở dữ liệu quan hệ. Tuy nhiên, không có mối quan hệ nào giữa các tài liệu trong cơ sở dữ liệu của MongoDB và các cơ sở dữ liệu khác & NBSP; NoQuery & NBSP; Kết quả là, các tài liệu được khép kín. Có một số ít khác nhau & nbsp; cách tiếp cận để mô hình hóa các mối quan hệ tài liệu này. & Nbsp;NoSQL databases. As a result, documents are self-contained. There area few differing approaches to modelling these document relationships. 

MongoDB & nbsp; Mối quan hệ là sự thể hiện của nhiều tài liệu được kết nối hợp lý với nhau trong MongoDB. Các phương pháp nhúng và tham chiếu là hai cách để tạo ra các mối quan hệ như vậy. Các mối quan hệ nhúng và các mối quan hệ tham chiếu tài liệu là hai loại mối quan hệ có cách làm việc khác nhau với các tài liệu. & NBSP; Relationships are the representation of how the multiple documents are logically connected to each other in MongoDB. The Embedded and Referenced methods are two ways to create such relationships. Embedded Relationships and Document Referenced Relationships are two types of relationships that have different ways of working with documents. 

Trong khi & nbsp; nhúng & nbsp; là lý tưởng cho các mối quan hệ một-một và một-nhiều, & nbsp; được tham chiếu & nbsp; là lý tưởng cho nhiều đến nhiều. Khử hóa, được nhúng, trong khi bình thường hóa là tên được đặt cho các mối quan hệ tham chiếu. Thiết lập mối quan hệ giữa các tài liệu có thể hỗ trợ trong việc hoàn thiện cấu trúc cơ sở dữ liệu, cũng như cải thiện hiệu suất và giảm thời gian thực hiện. & NBSP; 

Mô hình tài liệu nhúng: & NBSP; 

Các tài liệu được nhúng trong nhau trong mô hình này. Chẳng hạn, chúng tôi có hai tài liệu: một là tài liệu của sinh viên (chứa thông tin cơ bản của học sinh như ID và chi nhánh) và một tài liệu khác là tài liệu địa chỉ (chứa địa chỉ của học sinh). Kết quả là, thay vì tạo hai tài liệu riêng biệt, các tài liệu địa chỉ được nhúng trong tài liệu sinh viên. Nó sẽ hỗ trợ & nbsp; A & NBSP; Người dùng trong việc truy xuất dữ liệu với một truy vấn duy nhất thay vì một loạt các truy vấn.

Mô hình tham chiếu: & NBSP; 

Chúng tôi giữ các tài liệu riêng biệt trong mô hình này, nhưng một tài liệu chứa các tài liệu tham khảo cho các tài liệu khác. Chẳng hạn, chúng tôi có hai tài liệu: một là tài liệu của sinh viên (chứa thông tin cơ bản của học sinh như ID và chi nhánh) và một tài liệu khác là tài liệu địa chỉ (chứa địa chỉ của học sinh). Do đó, trường ID của tài liệu địa chỉ được tham chiếu trong tài liệu sinh viên. Bây giờ chúng tôi có thể truy vấn địa chỉ và nhận địa chỉ của học sinh bằng ID tham chiếu này. Các mối quan hệ chuẩn hóa thường được thiết kế bằng mô hình này.

Một mối quan hệ một-một (1: 1) & nbsp; & nbsp;(1:1)  

Cơ bản nhất trong tất cả các mối quan hệ là & nbsp; mối quan hệ một-một. 

Example:  

Hãy xem xét các kịch bản sau: Chúng tôi có hai tài liệu. Tài liệu đầu tiên chứa tên và chi nhánh ID của học sinh, trong khi tài liệu thứ hai chứa thông tin địa chỉ thường trú của học sinh. & NBSP; 

// Student document 
{ 
    StudentName: Ishan, 
    StudentId: k_hut_2022, 
    Branch:CSE 
} 
 
// Address document 
{ 
    StudentName: Ishan, 
    PremanentAddress: XXXXXXX, 
    City: Jaipur, 
    PinCode:302022 
} 

Nếu dữ liệu địa chỉ thường được sử dụng, người dùng sẽ tạo một truy vấn bằng tên sinh viên để truy xuất dữ liệu từ tài liệu địa chỉ. Tuy nhiên, vì hai tài liệu chứa cùng một trường (tức là, & nbsp; studentName), người dùng phải viết thêm một vài truy vấn để truy xuất thông tin cần thiết. Quy trình truy xuất dữ liệu này là tốn thời gian. Do đó, tài liệu địa chỉ được nhúng trong tài liệu sinh viên. & NBSP; 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 

Để truy xuất dữ liệu cần thiết, bây giờ chúng tôi chỉ cần viết một truy vấn duy nhất. Lợi ích của việc sử dụng các tài liệu nhúng là chúng tôi có thể nhóm các thông tin cần thiết vào một tài liệu duy nhất. Kết quả là, nhận được các chi tiết trong một cuộc gọi dễ dàng hơn. Tuy nhiên, khi tài liệu & nbsp; mở rộng & nbsp; ví dụ, bằng cách thêm thông tin học thuật và thể thao vào tài liệu trên, nó sẽ trở nên dài hơn và mất nhiều thời gian hơn để lấy thông tin. Chúng tôi có thể chỉ cần thông tin học tập hoặc thể thao khi nó được yêu cầu, và trong những trường hợp đó, chúng tôi có thể cần phải chia nhỏ tài liệu và sử dụng mẫu tập hợp con. & NBSP; 

Bây giờ, chúng tôi sẽ tạo một cơ sở dữ liệu với tên & nbsp; ‘kiến thứcHut, & nbsp; và một bộ sưu tập & nbsp; có tên & nbsp;‘ sinh viên. ‘Knowledgehut’ and a collection named ‘student’. 

db.student.insert({"StudentName":"Ishan","StudentId":"k_hut_2022","Branch":"CSE","PermanentAddress":{"permaAddress":"xxxxxxxx","City":"Jaipur","PinCode":302022}}) 

Bạn có thể kiểm tra & nbsp; các tài liệu trong cơ sở dữ liệu & nbsp; với: & nbsp; 

db.student.find().pretty() 

Bây giờ chúng tôi sẽ kiểm tra địa chỉ của học sinh: & nbsp; 

db.student.find({StudentName:"Ishan"},{"PermanentAddress.permaAddress":1}).pretty() 

Một mối quan hệ một-nhiều (1: n) & nbsp;1:N) 

Một & nbsp; cha mẹ & nbsp; tài liệu mà & nbsp; có nhiều tài liệu con là một ví dụ về & nbsp; mối quan hệ một-nhiều. & Nbsp; nó tương tự như một-một, nhưng với một số lượng lớn & nbsp; . & nbsp; Sử dụng phương thức nhúng để thiết lập mối quan hệ có thể làm giảm số lượng các hoạt động đọc cần thiết để truy xuất dữ liệu. & NBSP; 

Mối quan hệ một-nhiều với các tài liệu nhúng

Example:  

Chúng tôi có thể tạo mối quan hệ một-nhiều giữa dữ liệu bằng cách sử dụng các tài liệu nhúng, cho phép chúng tôi truy xuất dữ liệu một cách nhanh chóng với một vài thao tác đọc. Với sự giúp đỡ của một ví dụ, bây giờ chúng ta sẽ thảo luận về mối quan hệ một-nhiều với các tài liệu nhúng. & NBSP; & NBSP; 

Một người có thể có nhiều địa chỉ, chẳng hạn như địa chỉ hiện tại (địa điểm nơi người đó hiện đang cư trú) và địa chỉ dân cư (địa điểm nơi anh ta hoặc cô ta sở hữu một ngôi nhà hoặc có địa chỉ thường trú). Một đến nhiều khả năng mối quan hệ xảy ra trong thời gian đó. Do đó, chúng tôi có thể lưu trữ cả địa chỉ vĩnh viễn và hiện tại trong một tài liệu bằng mô hình tài liệu nhúng. & NBSP; 

// Student document 
{ 
    StudentNameIshan, 
    StudentIdk_hut_2022, 
    Branch:CSE 
} 
 
// Permanent Address document 
{ 
    StudentNameIshan, 
    PermanentAddress: XXXXXXX, 
    City: Jaipur, 
    PinCode:302022 
} 
 
// Current Address document 
{ 
    StudentNameIshan, 
    CurrentAddress: XXXXXXX, 
    City: Kota, 
    PinCode:324001 
} 

Thay vì viết ba tài liệu, giờ đây chúng ta có thể kết hợp chúng thành một. & NBSP; 

// Student document 
{ 
    StudentNameishan, 
    StudentIdk_hut_2022, 
    Branch:CSE 
    Address: [ 
    { 
        StudentNameIshan, 
        PermanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }, 
    { 
        StudentNameIshan, 
        CurrentAddress: XXXXXXX, 
        City: kota, 
        PinCode:324001 
    } 
    ] 
} 

Bởi vì chúng tôi giữ tất cả dữ liệu trong một bộ sưu tập duy nhất (ngay cả khi có nhiều hơn hai loại thông tin địa chỉ, chúng tôi có thể giữ chúng trong A & NBSP; JSON & NBSP; mảng), chúng tôi có thể truy vấn trong một cuộc gọi và nhận toàn bộ tập dữ liệu, dẫn đến không mất dữ liệu. & nbsp;JSON array), we can query in a single call and get the entire set of data, resulting in no data loss. 

Ở đây, chúng tôi đang sử dụng cơ sở dữ liệu & nbsp; tri thức & nbsp; và thu thập & nbsp; sinh viên. & Nbsp;knowledgehut and collection student. 

Chèn tài liệu vào bộ sưu tập với mã sau: & NBSP; 

db.student.insert({"StudentName":"Ishan","StudentId":"k_hut_2022","Branch":"CSE","PermanentAddress":[{"permaAddress":"xxxxxxxx","City":"Jaipur","PinCode":302022}, {"currAddress": "pppppp","City": "Kota","PinCode": 324001}]}) 

Bây giờ chúng tôi sẽ kiểm tra địa chỉ của học sinh: & nbsp; 

db.student.find({StudentName:"Ishan"},{"PermanentAddress.permaAddress":1,"PermanentAddress.currAddress":1}).pretty() 

Một trong những lợi ích chính của việc tạo ra các mối quan hệ nhúng trong MongoDB là các truy vấn được thực hiện nhanh hơn mối quan hệ được tham chiếu. Mối quan hệ này cũng cải thiện hiệu suất và kết quả thu được nhanh chóng. Điều này cũng đúng với các bộ dữ liệu lớn. & NBSP; 

Mối quan hệ một-nhiều với tài liệu tham khảo & nbsp; \ \

Mô hình tham chiếu tài liệu cũng có thể được sử dụng để tạo mối quan hệ một-nhiều. Chúng tôi giữ các tài liệu riêng biệt trong mô hình này, nhưng một tài liệu chứa các tài liệu tham khảo cho các tài liệu khác. & NBSP; 

Example:  

Với sự giúp đỡ của một ví dụ, bây giờ chúng ta sẽ thảo luận về mối quan hệ một-nhiều với tài liệu tham khảo tài liệu. Giả sử rằng chúng tôi có một giáo viên dạy trong hai lớp khác nhau. Và cô ấy đang sở hữu & nbsp; ba & nbsp; tài liệu: & nbsp; 

// Class 1 document 
{ 
    TeacherIdk_hut_2022, 
    ClassNamekhutA, 
    ClassIdD_123, 
    Studentcount44, 
    Subject: "DSA", 
} 
 
// Class 2 document 
{ 
    TeacherIdk_hut_2022, 
    ClassIdD_234, 
    ClassNamekhutB, 
    Studentcount55, 
    Subject: "Compiler”, 
} 

Truy xuất dữ liệu từ các tài liệu khác nhau này hiện đang tốn thời gian. Do đó, chúng tôi sẽ sử dụng mô hình tham chiếu để hỗ trợ giáo viên truy xuất dữ liệu bằng một truy vấn duy nhất. & NBSP; 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
0

Dữ liệu cho các lớp 1 và 2 giờ đây có thể dễ dàng truy xuất bằng các trường này & nbsp; classids & nbsp; & nbsp; 

Ở đây, chúng tôi đang làm việc với cơ sở dữ liệu & nbsp; tri thức & nbsp; và bây giờ, chúng tôi sẽ sử dụng một bộ sưu tập mới & nbsp; giáo viên. & Nbsp;knowledgehut and now, we will use a new collection teacher. 

Để chèn nhiều tài liệu, chúng tôi sẽ sử dụng & nbsp; insertMany (). & Nbsp; 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
1

Khi bạn chèn các tài liệu này vào bộ sưu tập, bạn sẽ thấy một đầu ra như thế này: & nbsp; 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
2

Bây giờ, để kiểm tra các tài liệu, & nbsp; sử dụng: & nbsp; 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
3

Mối quan hệ amany-to-nhiều (n: m) & nbsp;Many-to-Many relationship (N:M) 

As & nbsp; Không có lệnh nào để thực hiện mối quan hệ nhiều đến nhiều trong cơ sở dữ liệu quan hệ, nó khó khăn hơn một mối quan hệ một-nhiều. Điều tương tự cũng đúng khi sử dụng & nbsp; MongoDB & nbsp; để thực hiện chúng. Trên thực tế, bạn không thể sử dụng một lệnh để tạo bất kỳ loại mối quan hệ nào trong & nbsp; MongoDB. & Nbsp; & nbsp;there is no single command to implement a many-to-many relationship in a relational database, it is more difficult than a one-to-many relationship. The same is true when using mongoDB to implement them. In fact, you can't use a command to create any type of relationship in MongoDB 

Mặt khác, có khả năng lưu trữ các mảng trong tài liệu cho phép bạn lưu trữ dữ liệu theo cách dễ dàng truy xuất và bảo trì, cũng như cung cấp cho bạn thông tin bạn cần liên kết hai tài liệu trong mã của bạn. & NBSP ; 

Nhiều mối quan hệ là một loại & nbsp; MongoDB & nbsp; mối quan hệ trong đó bất kỳ hai thực thể nào trong một tài liệu có thể có nhiều mối quan hệ. & Nbsp;mongodb relationship in which any two entities within a document can have multiple relationships. 

Trong mối quan hệ này, chúng tôi có thể xem xét một trường hợp của các khóa học trực tuyến & nbsp; trang web trong đó & nbsp; có nhiều khóa học & nbsp; và cũng & nbsp; nhiều người dùng. & Nbsp; mỗi khóa học được mua bởi nhiều người dùng và & nbsp;website where there are many courses and also many users. Each course is purchased by many users and each user may purchase many courses. 

Example: : 

Đối với điều này, chúng tôi sẽ tạo A & NBSP; Cơ sở dữ liệu & NBSP; Kiến thức & nbsp; và & nbsp; hai bộ sưu tập khác nhau & nbsp; của & nbsp; người dùng & nbsp; và & nbsp;database knowledgehut and two different collections of users and courses. 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
4

Output:  

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
5

Trong bộ sưu tập các khóa học, chúng tôi có & nbsp; đã thêm hai khóa học và giá của các khóa học đó trong & nbsp; đô la. & Nbsp; 

Trong bộ sưu tập & nbsp; người dùng & nbsp; chúng tôi sẽ thêm tài liệu của người dùng đăng ký vào các khóa học & nbsp; với lệnh này & nbsp; lệnh:. & Nbsp; 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
6

Output:  

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
7

Chúng tôi có thể kiểm tra & nbsp; người dùng & nbsp; bộ sưu tập với: & nbsp; 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
8

Tiếp theo, chúng tôi & nbsp; phải cập nhật bộ sưu tập các khóa học với & nbsp; usersid & nbsp;. & Nbsp; 

{ 
    StudentNameIshan, 
    StudentIdk_hut_2020, 
    Branch:CSE 
    PermanentAddress:{ 
        PremanentAddress: XXXXXXX, 
        City: Jaipur, 
        PinCode:302022 
    }  
} 
9

Output:  

db.student.insert({"StudentName":"Ishan","StudentId":"k_hut_2022","Branch":"CSE","PermanentAddress":{"permaAddress":"xxxxxxxx","City":"Jaipur","PinCode":302022}}) 
0

Bây giờ bạn có thể xem bộ sưu tập các khóa học với & nbsp; usersid & nbsp; trong & nbsp; usersList. & Nbsp; & nbsp;  

Nhúng hoặc tham chiếu? Sử dụng nào khi? & Nbsp; 

Có hai loại mối quan hệ trong MongoDB. Nhúng và làm như một tài liệu tham khảo. Mỗi mối quan hệ đều có bộ lợi ích và nhược điểm riêng. Những kết nối này hỗ trợ nâng cao hiệu suất. Nó thực hiện bất kỳ mối quan hệ nào là một đến một, một, hoặc nhiều người tùy thuộc vào tình huống. Việc thực hiện mối quan hệ này đã cải thiện tính nhất quán dữ liệu. & NBSP; 

Tôi có nên sử dụng MongoDB cho dữ liệu quan hệ không?

Cơ sở dữ liệu NoQuery như MongoDB là một lựa chọn tốt khi dữ liệu của bạn tập trung vào tài liệu và không phù hợp với lược đồ của cơ sở dữ liệu quan hệ, khi bạn cần phù hợp với quy mô lớn, khi bạn nhanh chóng tạo mẫu và một vài trường hợp sử dụng khác., when you need to accommodate massive scale, when you are rapidly prototyping, and a few other use cases.

MongoDB có hỗ trợ các bảng quan hệ không?

MongoDB là một hệ thống quản lý cơ sở dữ liệu nguồn mở, đa nền tảng và không quan hệ.Non-Relational Database Management System.

Các mối quan hệ được thực hiện như thế nào trong MongoDB?

Để tạo mối quan hệ trong MongoDB, hoặc nhúng một tài liệu BSON trong một tài liệu khác hoặc tham khảo nó từ một tài liệu khác.Cơ sở dữ liệu MongoDB hoạt động khác nhau với cơ sở dữ liệu quan hệ.Điều này cũng đúng với các mối quan hệ.embed a BSON document within another, or reference it from another. MongoDB databases work differently to relational databases. This is also true of relationships.