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([{$unwind:"$channels"},{"$group":{"_id":{key:"$key",fname:"$channels.folder"},"channels":{"$push":"$channels"}}},{"$group":{"_id":"$_id.key","grp":{"$push":{k:"$_id.fname",v:"$channels"}}}},{"$addFields":{"grp":{"$arrayToObject":"$grp"},}},{"$replaceRoot":{"newRoot":{"$mergeObjects":["$grp","$$ROOT"]}}},{"$project":{grp:0}}])