MongoDB может хранить вложенные документы:
Node
{
"value" : "root"
"children" : [ { "value" : "child1", "children" : [ ... ] },
{ "value" : "child2", "children" : [ ... ] } ]
}
Однако я не рекомендую использовать поддокументы для древовидных структур или чего-либо достаточно сложного. Субдокументы не являются гражданами первого уровня; они не являются коллекционными предметами.
Например, предположим, что вы хотите быстро найти узлы с заданным значением. Через индекс на value
этот поиск будет быстрым. Однако, если значение находится во вложенном документе, оно не будет проиндексировано, поскольку оно не является значением элемента коллекции.
Следовательно, обычно лучше выполнить сериализацию вручную и вместо этого сохранить список идентификаторов:
Node
{
"_id" : ObjectId("..."),
"parentId" : ObjectId("..."), // or null, for root
}
Вам нужно будет выполнить сериализацию вручную, чтобы получить идентификаторы соответствующего элемента.
Подсказка
Предположим, вы хотите получить целую ветвь дерева. Вместо того, чтобы хранить только прямой родительский идентификатор, вы можете хранить все идентификаторы предков:
"ancestorIds": [id1, id2, id3]