I’am having document like following.
{
_id:ObjectId("3df61406-a65c-480d-b258-85786caa871e"),
"model":["nnn","mmm"]
childrens: ["2a865da0-fbe1-4842-954d-8c7b527f8bd1", "8d06e6af-5f68-4559-9712-706afed5c0db"]
},
{
_id:ObjectId("2a865da0-fbe1-4842-954d-8c7b527f8bd1"),
"model":["nnn","mmm"],
childrens: ["4f84d69a-94da-4219-a85d-0293a615da8d", "5e55c16f-1b39-48ca-8f79-7acc373dca13"]
},
{
_id:ObjectId("4f84d69a-94da-4219-a85d-0293a615da8d"),
"model":["nnn","mmm"],
childrens: []
},
{
_id:ObjectId("5e55c16f-1b39-48ca-8f79-7acc373dca13"),
"model":["nnn","mmm"],
childrens: ["fb47003b-8b9f-4c1c-bc6c-cf51c0dbb8bc"]
},
{
_id:ObjectId("8d06e6af-5f68-4559-9712-706afed5c0db"),
"model":["nnn","mmm"],
childrens:[]
},
{
_id:ObjectId("fb47003b-8b9f-4c1c-bc6c-cf51c0dbb8bc"),
"model":["nnn","mmm"],
childrens:[]
}
I need to fetch data from root (ObjectId(“3df61406-a65c-480d-b258-85786caa871e”)) to last child. I need a query to get the following output.
{
_id:ObjectId("3df61406-a65c-480d-b258-85786caa871e"),
"model":["nnn","mmm"]
childrens: [
{
_id:ObjectId("2a865da0-fbe1-4842-954d-8c7b527f8bd1"),
"model":["nnn","mmm"],
childrens: [
{
_id:ObjectId("4f84d69a-94da-4219-a85d-0293a615da8d"),
"model":["nnn","mmm"],
childrens: []
},
{
_id:ObjectId("5e55c16f-1b39-48ca-8f79-7acc373dca13"),
"model":["nnn","mmm"],
childrens: [
{
_id:ObjectId("fb47003b-8b9f-4c1c-bc6c-cf51c0dbb8bc"),
"model":["nnn","mmm"],
childrens:[]
}
]
}
]
},
{
_id:ObjectId("8d06e6af-5f68-4559-9712-706afed5c0db"),
"model":["nnn","mmm"],
childrens:[]
}]
}
I have tried the following query, but that was also not giving exact output.
db.collection.aggregate([
{
"$match": {
"_id": "3df61406-a65c-480d-b258-85786caa871e"
}
},
{
$unwind: "$childrens"
},
{
$graphLookup: {
from: "collection",
startWith: "$childrens",
connectFromField: "childrens",
connectToField: "_id",
as: "childrensList"
}
}
])