Database

[{_id:"1","Parent":"ParentEnum1","firstChild":"firstChildEnum2","secondChild":"secondChildEnum3","thirdChild":"thirdChildEnum1"},{_id:"2","Parent":"ParentEnum1","firstChild":"firstChildEnum1","secondChild":"secondChildEnum3","thirdChild":"thirdChildEnum1"},{_id:"3","Parent":"ParentEnum2","firstChild":"firstChildEnum2","secondChild":"secondChildEnum5","thirdChild":"thirdChildEnum8"},{_id:"4","Parent":"ParentEnum2","firstChild":"firstChildEnum2","secondChild":"secondChildEnum1","thirdChild":null},{_id:"5","Parent":"ParentEnum4","firstChild":"firstChildEnum4","secondChild":"secondChildEnum1","thirdChild":"thirdChildEnum5"},{_id:"6","Parent":"ParentEnum1","firstChild":"firstChildEnum4","secondChild":"secondChildEnum5","thirdChild":"thirdChildEnum7"}]

Query

db.collection.aggregate([{$group:{_id:{Parent:"$Parent",firstChild:"$firstChild",secondChild:"$secondChild"},thirdChild:{$push:"$thirdChild"}}},{$group:{_id:{Parent:"$_id.Parent",firstChild:"$_id.firstChild"},secondChild:{$push:{k:"$_id.secondChild",v:"$thirdChild"}}}},{$group:{_id:"$_id.Parent",firstChild:{$push:{k:"$_id.firstChild",v:{$arrayToObject:"$secondChild"}}}}},{$replaceRoot:{newRoot:{$arrayToObject:[[{k:"$_id",v:{$arrayToObject:"$firstChild"}}]]}}}])

Result