![](/img/trans.png)
[英]How to model many-to-many relationships in MongoDB (for a MySQL user)
[英]How do you model many-to-many relationships in MongoDB without using an intermediate table?
我正在嘗試在MongoDB中建立多對多關系的模型,並增加了對關系進行“元數據”跟蹤的要求。
這些模型本身看起來很簡單,如下所示:
Student model
{
_id: <ObjectID1>,
name: "Foo Bar"
}
School model
{ _id: <ObjectID123>,
name: "Cityville Highschool",
location: "Cityville, Stateville"
}
現在,我想將這些鏈接成多對多關系,以便學生可以成為多個學校的一部分,並且學校可以有許多學生。 通常在MongoDB中,您可以在每個模型中保留一個其他模型的數組。 例如:
Student model
{
_id: <ObjectID1>,
name: "Foo Bar",
schools: [<SchoolID1>, <SchoolID2>, ...]
}
School model
{ _id: <ObjectID123>,
name: "Cityville Highschool",
location: "Cityville, Stateville",
students: [<StudentID1>, <StudentID2>, ...]
}
但是,如果我現在想獲得有關該關系的數據怎么辦? 例如,學生進入和離開學校的日期:“ enter_date”和“ exit_date”。 通常,在sql中,您將為StudentSchool創建一個JOIN表,如下所示:
StudentSchool:
{ studentId: 123,
schoolId: 456,
enter_date: 12-12-2014,
exit_date: 12-12-2015
}
您將如何在MongoDB中做到這一點? 我已經排除的一些選項:
在學生模型中,您不只是將SchoolIds放入數組中,而是將整個文檔提供元數據? 例如enter_date,exit_date? 可能在兩個地方(即學生和學校)都沒有該注釋,可能太多了,但是根據預期的用途,即使是這樣也是可行的。
Student model
{
_id: <ObjectID1>,
name: "Foo Bar",
schools: [
{ _id: <SchoolID1>,
enter_date: ...,
exit_date: ...
},
{ _id: <SchoolID2>,
enter_date: ...,
exit_date: ...
},
...
]
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.