Tyvärr kan du inte få hela djupet i ett kapslat format. Att använda en vy är en lösning som låter dig utföra den operationen, men du skulle behöva skapa en ny vy för varje nivå av inbäddning som du behöver. Istället skulle jag överväga att utföra en graphLookup utan att ge ett djup, med början från rotnivån, hämtar hela hierarkin i en enda fråga innan trädet beräknas på programnivå.
Det här skulle se ut ungefär så här:
db.node.aggregate([
{ $match: {
parentId: null
}},
{ $graphLookup: {
from: "node",
startWith: "$nodeId",
connectFromField: "nodeId",
connectToField: "parentId",
depthField: "depth",
as: "children"
}}
]);
Detta bör låta dig hämta hela hierarkin på en gång, så härnäst måste du beräkna trädet i din applikation, från informationen du kommer att ha i "barn"-arrayen.