ドキュメント参照との 1 対多関係のモデル化
Overview
このページでは、ドキュメント間の参照を使用して、接続されたデータ間の 1 対多の関係を記述するデータモデルについて説明します。
パターン
出版社と書籍の関係をマッピングする次の例を考えてみましょう。この例では、発行者情報の繰り返しを避けるために、埋め込みよりも参照を使用する利点を示しています。
出版社のドキュメントを本のドキュメントに埋め込むと、次のドキュメントが示すように、出版社のデータの繰り返しにつながります。
{ title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher: { name: "O'Reilly Media", founded: 1980, location: "CA" } } { title: "50 Tips and Tricks for MongoDB Developer", author: "Kristina Chodorow", published_date: ISODate("2011-05-06"), pages: 68, language: "English", publisher: { name: "O'Reilly Media", founded: 1980, location: "CA" } }
出版社データの重複を避けるため、参照を使用して、出版社の情報を書籍コレクションとは別のコレクションに保管します。
参照を使用する場合、関係の増加によって参照を保存する場所が決まります。出版社ごとの書籍数が少なく、増加が限られている場合には、出版社ドキュメント内に書籍の参照を保存すると便利な場合があります。そうではなく、出版社ごとの書籍の数に制限がない場合、このデータモデルは次の例のように、可変で増加する配列につながります。
{ name: "O'Reilly Media", founded: 1980, location: "CA", books: [123456789, 234567890, ...] } { _id: 123456789, title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English" } { _id: 234567890, title: "50 Tips and Tricks for MongoDB Developer", author: "Kristina Chodorow", published_date: ISODate("2011-05-06"), pages: 68, language: "English" }
可変で増え続ける配列を避けるためには、出版社への参照は書籍ドキュメントの中に保存します。
{ _id: "oreilly", name: "O'Reilly Media", founded: 1980, location: "CA" } { _id: 123456789, title: "MongoDB: The Definitive Guide", author: [ "Kristina Chodorow", "Mike Dirolf" ], published_date: ISODate("2010-09-24"), pages: 216, language: "English", publisher_id: "oreilly" } { _id: 234567890, title: "50 Tips and Tricks for MongoDB Developer", author: "Kristina Chodorow", published_date: ISODate("2011-05-06"), pages: 68, language: "English", publisher_id: "oreilly" }