mongo リレーション
#技術ログ
例えば、一つの日付に複数タスクが紐付いている場合、RDBでは(かなり無理矢理だが…)
table:Date
id key
日付 日付型
table:Task
id key
日付id Dateのid
task string
みたいにやってある日付のidを持つtaskを抽出するが、mongoでは
code:typescript
type Date = {
_id: string
date: string
tasks: Task[]
}
// 実際のDate 1ドキュメント
{
_id: 'xxxxxxxxxxxxxx',
date: '2020-01-01',
tasks: [
{ desc: '2020-01-01のタスク01' },
{ desc: '2020-01-01のタスク02' },
{ desc: '2020-01-01のタスク03' }
]
}
のようにスキーマ設計して良いらしい。
また、日付・タスクが多対多の関係にある場合、 RDBでは
table:中間
id key
日付のid Dateのid
タスクのid Taskのid
のような中間テーブルを用意するが、mongoでは
code:typescript
type Date = {
_id: string
date: string
tasks: string[] // Taskの_id
}
type Task = {
_id: string
desc: string
dates: string[] // Dateの_id
}
となるようにスキーマ設計するらしい。
参考:
MongoDBにおける関連(Relation)のスキーマ設計 - masa_wの日記