As presented in https://www.slideshare.net/mongodb/webinar-working-with-graph-data-in-mongodb, slide 50 it is possible to use $graphLookup
on a View in order to get a 2 levels deep tree-structure in nested format.
I have a MongoDB collection with tree nodes as documents with the following format:
{ "_id" : { "$oid" : "5b1a952361c6fa3418a15660" },
"nodeId" : 23978995,
"name" : "settings",
"type" : "Node",
"parentId" : [ 23978893, 23979072, 23979081 ] }
I have created a View like:
db.createView("treeView", "node", [
{
$graphLookup: {
from: "node",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
maxDepth: 0,
as: "children"
}
}
]);
And I execute graph lookups like:
db.node.aggregate([
{ $match: {"nodeId": 23978786 } },
{
$graphLookup: {
from: "treeView",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
maxDepth: 0,
as: "children"
}
}
]);
My question is how can I get the whole hierarchy, all levels deep?
@kmandalas I'm facing this kind of issue from last 2 days, my collection is a bit different but the concept is the same as your I hope what I wrote will help you to get the result,(I use reference of SO answers)
My Collection Schema is like :
First, I use $graphLookup, than I got all children into one appropriate parent, like:
After getting this kind of result I create a tree in node js without using any third-party lib. tree logic code is :(!note:docs is $graphlooup output nothing else)
I Hope it'll help You
Unfortunately, you can't get the full depth in a nested format. Using a view is a workaround which lets you perform that operation, but you would need to create a new view for each level of embedding that you need. Instead, I would consider performing a graphLookup without providing a depth, starting from the root level, fetching all the hierarchy in a single query, before computing the tree at the application level.
This would look like something like this:
This should let you fetch the whole hierarchy in one go, so next, you need to calculate the tree in your application, from the information you will have in the "children" array.