MongoDB はサブドキュメントを保存できます。
Node
{
"value" : "root"
"children" : [ { "value" : "child1", "children" : [ ... ] },
{ "value" : "child2", "children" : [ ... ] } ]
}
ただし、ツリー構造やかなり複雑なものにサブドキュメントを使用することはお勧めしません。サブドキュメントは第 1 レベルの市民ではありません。コレクションアイテムではありません。
たとえば、指定された値を持つノードをすばやく見つけられるようにしたいとします。のインデックスをvalue
使用すると、検索が高速になります。ただし、値がサブドキュメントにある場合は、コレクション要素の値ではないため、インデックスが作成されません。
したがって、通常はシリアル化を手動で行い、代わりに ID のリストを保存することをお勧めします。
Node
{
"_id" : ObjectId("..."),
"parentId" : ObjectId("..."), // or null, for root
}
それぞれの要素の ID を取得するには、シリアル化の一部を手動で行う必要があります。
ヒント
ツリーのブランチ全体を取得したいとします。直接の親 ID のみを保存する代わりに、代わりにすべての祖先 IDを保存できます。
"ancestorIds": [id1, id2, id3]