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]
person
mnemosyn
schedule
17.12.2011