Database

[{array:[{key:"alpha",value:{name:"foo",},},{key:"beta",value:{name:"bar",},},{key:"alpha",value:{name:"baz",},},]}]

Query

db.collection.aggregate(/** Pipeline*/[{$set:{newarray:{$map:{input:{$setUnion:["$array.key"]},in:{key:"$$this",values:{$map:{input:{$filter:{input:"$array",as:"elem",cond:{$eq:["$$elem.key","$$this"]}}},as:"vals",in:{name:"$$vals.value.name"}}}}}}}}])

Result