It works for me. But you are missing the parent doc in your example.
Input docs:
db.coll.insertMany(
[
{
_id: ObjectId("612f84891f2da394c2b8ed21"),
user: '002',
refUserId: '001',
status: 'SUCCESS'
},
{
_id: ObjectId("612f84891f2da394c2b8ed22"),
user: '003',
refUserId: '001',
status: 'SUCCESS'
},
{
_id: ObjectId("612f85a11f2da394c2b8ed23"),
user: '001',
status: 'SUCCESS'
}
])
Query:
db.coll.aggregate(
[
{
"$graphLookup": {
"from": "coll",
"startWith": "$user",
"connectFromField": "user",
"connectToField": "refUserId",
"as": "children",
"maxDepth": 3
}
}
])
Result:
[
{
_id: ObjectId("612f84891f2da394c2b8ed21"),
user: '002',
refUserId: '001',
status: 'SUCCESS',
children: []
},
{
_id: ObjectId("612f84891f2da394c2b8ed22"),
user: '003',
refUserId: '001',
status: 'SUCCESS',
children: []
},
{
_id: ObjectId("612f85a11f2da394c2b8ed23"),
user: '001',
status: 'SUCCESS',
children: [
{
_id: ObjectId("612f84891f2da394c2b8ed22"),
user: '003',
refUserId: '001',
status: 'SUCCESS'
},
{
_id: ObjectId("612f84891f2da394c2b8ed21"),
user: '002',
refUserId: '001',
status: 'SUCCESS'
}
]
}
]
Cheers,
Maxime.