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]