簡體   English   中英

如何在不使用中間表的情況下在MongoDB中建模多對多關系?

[英]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中做到這一點? 我已經排除的一些選項:

  1. 創建一個基本上模仿sql JOIN表的新Collection(即StudentSchool集合)。 由於似乎不是使用Mongo的正確方法而被排除在外,也可能難以管理更新/刪除。

在學生模型中,您不只是將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM