1

ツリー構造を次のように保存しています

{_id:1, type:type1, text:xxxx}
{_id:2, type:type2, text:xxxx, ancestorIDs:[ObjectId(1)]}
{_id:3, type:type2, text:xxxx, ancestorIDs:[ObjectId(1), ObjectId(2)]}
{_id:4, type:type1, text:xxxx}
{_id:5, type:type1, text:xxxx}

子を持たないすべての type1 ノードのリストを見つける必要があります。例えば。ノード 4 & 5。

4

1 に答える 1

1

要件の典型的なパターンには、各ノード ドキュメントに子の配列を保持することも含まれます。mongodb.org のドキュメントには、ツリー構造パターンの良い例がいくつか記載されています。

http://docs.mongodb.org/manual/tutorial/model-tree-structures/

現在の設計では、祖先であるすべてのノードに対してクエリを実行し、{type:type1, _id:$nin[]} のような条件を持つクエリを実行する必要があります。このクエリと 2 段階のプロセスは、必要に応じて十分なパフォーマンスを発揮しません。また、2 つのステップが必要なため、トランザクションが関係しているかどうかをよく考える必要があります。2 フェーズのコミットでは、追加のオーバーヘッドが追加されます。

したがって、パターンには通常、子の配列も含まれます。これにより、{type:type1, children:{$size:0}} のようなクエリをすばやく実行できます (または、$exists を使用することもできます)。通常、これらの参照を維持すると、ツリー構造が頻繁に変更されず、クエリのパフォーマンスがより重要になるため、より良いトレードオフが得られます。

于 2013-07-27T19:29:30.730 に答える