Database
[{"class":3,"type":"A","color":"r","filed1":"something","field2":"123"},{"class":3,"type":"A","color":"r","filed1":"_","field2":"234"},{"class":3,"type":"A","color":"r","filed1":"45","field2":"345"},{"class":3,"type":"A","color":"g","filed1":"yt","field2":"456"},{"class":3,"type":"B","color":"b","filed1":"xx","field2":"567"},{"class":1,"type":"A","color":"r","filed1":"ds","field2":"678"},{"class":1,"type":"A","color":"r","filed1":"bb","field2":"789"},{"class":1,"type":"A","color":"r","filed1":"go","field2":"890"},{"class":1,"type":"B","color":"b","filed1":"aa","field2":"123"},{"class":1,"type":"B","color":"g","filed1":"ññ","field2":"123"}]
Query
db.collection.aggregate([{$group:{_id:{class:"$class",type:"$type",color:"$color"},v:{$push:{filed1:"$filed1",field2:"$field2"}}}},{$group:{_id:{class:"$_id.class",type:"$_id.type"},docs2:{$push:{k:"$_id.color",v:"$v"}}}},{$group:{_id:"$_id.class",docs3:{$push:{k:"$_id.type",v:{$arrayToObject:"$docs2"}}}}},{$replaceWith:{$mergeObjects:[{_id:"$_id"},{$arrayToObject:"$docs3"}]}}])