![](/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.