Database

[{"_id":1,"materials":[{"name":"XYZ","type":"Red","category":"A"},{"name":"ZYX","type":"Blue","category":"B"}]}]

Query

db.collection.aggregate([{$project:{materials:{$map:{input:"$materials",as:"m",in:{$arrayToObject:[{$map:{input:{$objectToArray:{name:"$$m.name",type:"$$m.type"}},in:{k:{$concat:["material","_","$$m.category","_","$$this.k"]},v:"$$this.v"}}}]}}}}},{$unwind:"$materials"},{$group:{_id:null,materials:{$mergeObjects:"$materials"}}},{$replaceRoot:{newRoot:"$materials"}}])

Result