Database

db={"c1":[{"_id":"60f83d3cd66842301905aa77","id":527438,"name":"CryptoPunk #4050","asset_contract":{"name":"CryptoPunks","address":"0xb47e3cd837ddf8e4c57f05d70ab865de6e193bbb"},"traits":[{"trait_type":"type","value":"Male","display_type":null,"max_value":null,"trait_count":6039,"order":null},{"trait_type":"accessory","value":"Mohawk","display_type":null,"max_value":null,"trait_count":441,"order":null},{"trait_type":"accessory","value":"Earring","display_type":null,"max_value":null,"trait_count":2459,"order":null},{"trait_type":"accessory","value":"Frown","display_type":null,"max_value":null,"trait_count":261,"order":null}],"token_id":"4050"}],"c2":[{}]}

Query

db.c1.aggregate([{"$lookup":{"from":"c2","let":{"traits":"$traits"},"pipeline":[{"$addFields":{"traits":"$$traits"}},{"$project":{"traits":1}},{"$unwind":{"path":"$traits"}},{"$group":{"_id":"$traits.trait_type","values":{"$push":"$traits.value"}}},{"$replaceRoot":{"newRoot":{"$let":{"vars":{"r":{"$map":{"input":{"$objectToArray":"$$ROOT"},"as":"m","in":["$$m.k","$$m.v"]}}},"in":{"$let":{"vars":{"pair":[[{"$replaceAll":{"input":{"$concat":["traits_",{"$toLower":{"$arrayElemAt":[{"$arrayElemAt":["$$r",0]},1]}}]},"find":" ","replacement":"_"}},{"$let":{"vars":{"v":{"$arrayElemAt":[{"$arrayElemAt":["$$r",1]},1]}},"in":{"$cond":[{"$eq":[{"$size":"$$v"},1]},{"$arrayElemAt":["$$v",0]},"$$v"]}}}]]},"in":{"$arrayToObject":"$$pair"}}}}}}}],"as":"traits"}},{"$addFields":{"traits":{"$arrayToObject":{"$map":{"input":"$traits","as":"t","in":{"$arrayElemAt":[{"$map":{"input":{"$objectToArray":"$$t"},"as":"m","in":["$$m.k","$$m.v"]}},0]}}}}}},{"$replaceRoot":{"newRoot":{"$mergeObjects":["$traits","$$ROOT"]}}},{"$project":{"traits":0}}])

Result