Database

[{key:1,channels:[{"id":1,"name":"XXX","folder":"C"},{"id":2,"name":"XXX","folder":"A"},{"id":3,"name":"XXX","folder":"B"},{"id":4,"name":"XXX","folder":"A"},{"id":5,"name":"XXX","folder":"B"},{"id":6,"name":"XXX","folder":"C"}]},{key:2,channels:[{"id":1,"name":"XXX","folder":"D"},{"id":2,"name":"XXX","folder":"B"},{"id":3,"name":"XXX","folder":"A"},{"id":4,"name":"XXX","folder":"C"},{"id":5,"name":"XXX","folder":"A"},{"id":6,"name":"XXX","folder":"D"}]}]

Query

db.collection.aggregate([{$match:{key:{$in:[1,2]}}},{$unwind:"$channels"},{$group:{_id:{id:"$key",folder:"$channels.folder"},channels:{$push:{id:"$channels.id",name:"$channels.name"}}}},{$group:{_id:"$_id.id",channels:{$push:{k:"$_id.folder",v:"$channels"}}}},{$project:{channels:{$arrayToObject:"$channels"}}}])

Result