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

ネストされたセットを持つモデルツリー構造

項目一覧

  • Overview
  • パターン

このドキュメントでは、ツリーの可変性を犠牲にしてサブツリーの検出を最適化するツリーのような構造を記述するデータ モデルについて説明します。

ツリー内の各ノードは、Nested Sets(入れ子集合)のパターンにより、ツリーのラウンドトリップ トラバーサル内で停止点として特定されます。ツリー内の各ノードは、アプリケーションにより、初回トリップ時とリターントリップ時の 2 回訪問されます。Nested Sets(入れ子集合)パターンは、各ツリー ノードをドキュメントに格納します。ドキュメントには、ツリー ノードに加えて、ノードの親の ID、left フィールドのノードの初期停止、right フィールドの戻り停止が格納されます。

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

階層データの例。番号は、ツリーの往復トラバース中にノードで停止する場所を識別します。

次の例では、Nested Sets(入れ子集合)を使用してツリーをモデル化します。

db.categories.insertMany( [
{ _id: "Books", parent: 0, left: 1, right: 12 },
{ _id: "Programming", parent: "Books", left: 2, right: 11 },
{ _id: "Languages", parent: "Programming", left: 3, right: 4 },
{ _id: "Databases", parent: "Programming", left: 5, right: 10 },
{ _id: "MongoDB", parent: "Databases", left: 6, right: 7 },
{ _id: "dbm", parent: "Databases", left: 8, right: 9 }
] )

クエリを実行してノードの子孫を検索できます。

var databaseCategory = db.categories.findOne( { _id: "Databases" } );
db.categories.find( { left: { $gt: databaseCategory.left }, right: { $lt: databaseCategory.right } } );

Nested Sets(入れ子集合) パターンは、サブツリーを見つけるための高速で効率的なソリューションを提供しますが、ツリー構造を変更するには非効率的です。したがって、このパターンは変更されない静的ツリーに最適です。

戻る

マテリアライズドパス