Как представлено в https://www.slideshare.net/mongodb/webinar-working-with-graph-data-in-mongodb, слайд 50 можно использовать $graphLookup
в представлении, чтобы получить двухуровневую древовидную структуру. в вложенном формате.
У меня есть коллекция MongoDB с узлами дерева в виде документов в следующем формате:
{ "_id" : { "$oid" : "5b1a952361c6fa3418a15660" },
"nodeId" : 23978995,
"name" : "settings",
"type" : "Node",
"parentId" : [ 23978893, 23979072, 23979081 ] }
Я создал представление вроде:
db.createView("treeView", "node", [
{
$graphLookup: {
from: "node",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
maxDepth: 0,
as: "children"
}
}
]);
И я выполняю поиск по графу, например:
db.node.aggregate([
{ $match: {"nodeId": 23978786 } },
{
$graphLookup: {
from: "treeView",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
maxDepth: 0,
as: "children"
}
}
]);
Мой вопрос в том, как я могу получить всю иерархию, все уровни глубоко?
$graphLookup
не возвращает вложенный формат. Вы получаете результат в точности так, как вы бы видели, и при желании можете добавить свойство, чтобы указать найденную глубину совпадения. Если вы ищете бесконечную глубину, тогда должна быть довольно ясная причина, по которой этого не существует для базы данных. Вы, конечно, можете указатьmaxDepth
, на сколько глубинных рекурсий вам действительно нужно пройти. - person Neil Lunn   schedule 09.06.2018$graphLookup
в представлении достигается вложение. Я получаю это в действии. Теперь о чем я спрашиваю, могу ли я получить это во всей глубине. - person kmandalas   schedule 09.06.2018