子参照を持つモデルツリー構造
Overview
このページでは、親ノードから子ノードへの参照を保存することで、MongoDB ドキュメント内のツリーのような構造を記述するデータモデルについて説明します。
パターン
子参照パターンは、各ツリー ノードをドキュメントに保存します。ツリー ノードに加えて、ドキュメントはノードの子の ID を配列に保存します。
以下のカテゴリの階層を考慮します。
以下の例では、子参照を使用してツリーをモデル化し、ノードの子への参照をフィールド children
に保存しています。
db.categories.insertMany( [ { _id: "MongoDB", children: [] }, { _id: "dbm", children: [] }, { _id: "Databases", children: [ "MongoDB", "dbm" ] }, { _id: "Languages", children: [] }, { _id: "Programming", children: [ "Databases", "Languages" ] }, { _id: "Books", children: [ "Programming" ] } ] )
ノードの直下の子を検索するクエリは高速で簡単です。
db.categories.findOne( { _id: "Databases" } ).children フィールド
children
にインデックスを作成すると、子ノードによる高速検索が可能になります。db.categories.createIndex( { children: 1 } ) children
フィールドでノードをクエリすると、その親ノードと兄弟ノードを見つけられます。db.categories.find( { children: "MongoDB" } )
子参照パターンは、サブツリーに対する操作が必要ない限り、ツリー ストレージに適したソリューションを提供します。このパターンは、ノードが複数の親を持つ可能性があるグラフを保存する場合にも適したソリューションを提供できます。