Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

祖先の配列を持つモデルツリー構造

項目一覧

  • Overview
  • パターン

このページでは、親ノードへの参照とすべての祖先ノードを保存する配列を使用して、MongoDB ドキュメント内のツリーのような構造を記述するデータモデルについて説明します。

祖先の配列パターンは、各ツリー ノードをドキュメントに保存します。ツリー ノードに加えて、ドキュメントはノードの祖先またはパスの ID を配列に保存します。

以下のカテゴリの階層を考慮します。

カテゴリのサンプル階層のツリー データモデル。

次の例では、 祖先の配列 を使用してツリーをモデル化します。 これらのドキュメントには ancestorsフィールドに加えて、 parentフィールドにすぐの親カテゴリへの参照も保存されます。

db.categories.insertMany( [
{ _id: "MongoDB", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" },
{ _id: "dbm", ancestors: [ "Books", "Programming", "Databases" ], parent: "Databases" },
{ _id: "Databases", ancestors: [ "Books", "Programming" ], parent: "Programming" },
{ _id: "Languages", ancestors: [ "Books", "Programming" ], parent: "Programming" },
{ _id: "Programming", ancestors: [ "Books" ], parent: "Books" },
{ _id: "Books", ancestors: [ ], parent: null }
] )
  • ノードの祖先またはパスを検索するクエリは高速で簡単です。

    db.categories.findOne( { _id: "MongoDB" } ).ancestors
  • フィールドancestorsにインデックスを作成すると、祖先ノードによる高速検索を有効にできます。

    db.categories.createIndex( { ancestors: 1 } )
  • フィールドancestorsでクエリを実行すると、その子孫がすべて検索できます。

    db.categories.find( { ancestors: "Programming" } )

祖先の配列パターンは、祖先フィールドの要素にインデックスを作成することで、ノードの子孫と祖先を検索するための高速で効率的なソリューションを提供します。 これにより、祖先の配列はサブツリーを操作するのに適した選択になります。

祖先の配列パターンはマテリアライズド パスパターンよりもわずかに遅くなりますが、より簡単に使用できます。

戻る

子参照