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" }