我正在尝试在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中做到这一点?我已经排除了一些选项:
答案 0 :(得分:0)
在Student模型中,你不只是将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: ...
},
...
]
}