Database

[{"key":1,traits:[{type:"Language",val:"English"},{type:"Age",val:37},{type:"Language",val:"Spanish"}]},{"key":1,traits:[{type:"Language",val:"English"},{type:"Age",val:38}]},]

Query

db.collection.update({},[{$set:{language:{$filter:{input:"$traits",cond:{$eq:["$$this.type","Language"]}}},traits:{$filter:{input:"$traits",cond:{$ne:["$$this.type","Language"]}}}}},{$set:{language:{type:"Language",val:{$cond:[{$gt:[{$size:"$language"},1]},"MultiLang",{$first:"$language.val"}]}}}},{$set:{traits:{$concatArrays:["$traits",[{$first:"$language"}]]},language:"$$REMOVE"}}])

Result