Database

/** 1*/[{"_id":ObjectId("60dc4095dda6cf5373297af7"),"id":"id1","user":"user1","study":"study","form":"f1","formData":[{"e11":"value1"},{"e12":"value2"},{"e13":"value3"}]},{"_id":ObjectId("60dc4095dda6cf5373297af8"),"id":"id2","user":"user1","study":"study","form":"f1","formData":[{"e11":"value4"},{"e12":"value5"},{"e13":"value6"}]},{"_id":ObjectId("60dc4095dda6cf5373297af9"),"id":"id3","user":"user1","study":"study","form":"f2","formData":[{"e21":"value7"},{"e22":"value8"}]},{"_id":ObjectId("60dc4095dda6cf5373297afa"),"id":"id4","user":"user1","study":"study1","form":"f2","formData":[{"e21":"value9"},{"e22":"value10"}]},{"_id":ObjectId("60dc4095dda6cf5373297afb"),"id":"id2","user":"user2","study":"study1","form":"f2","formData":[{"e21":"value11"},{"e22":"value12"}]}]

Query

db.collection.aggregate([{"$match":{"form":{"$in":["f1","f2"]},},},{"$group":{"_id":"$user","formData":{"$push":{"$mergeObjects":[{"$reduce":{"input":"$formData","initialValue":{},"in":{"$mergeObjects":["$$value",{"$arrayToObject":{"$map":{"input":{"$objectToArray":"$$this"},"as":"formValue","in":{"k":{"$concat":["$form","-","$$formValue.k"]},"v":"$$formValue.v"}},},},]},}},{"study":"$study","user":"$user","form":"$form"},],},},},},{"$project":{"formData":{"$cond":{"if":{"$gt":[{"$size":"$formData"},1]},"then":{$reduce:{input:{$range:[0,{$size:"$formData"}]},initialValue:[],in:{$concatArrays:["$$value",{$let:{vars:{i:"$$this"},in:{$map:{input:{$range:[{$add:[1,"$$i"]},{$size:"$formData"}]},in:[{"$let":{"vars":{"arrayElem1":{$arrayElemAt:["$formData","$$i"]},"arrayElem2":{$arrayElemAt:["$formData","$$this"]},},"in":{"$cond":{"if":{"$and":[{"$ne":["$$arrayElem1.form","$$arrayElem2.form"]},/** {* "$eq": [* "$$arrayElem1.user",* "$$arrayElem2.user"* ]* },*/],},"then":{"$mergeObjects":["$$arrayElem2","$$arrayElem1",],},"else":"$$REMOVE",},},}}]}}}}]}}},"else":["$formData"]},},},},{"$project":{"formData":{"$reduce":{"input":"$formData","initialValue":[],"in":{"$concatArrays":["$$value",{"$cond":{"if":{"$ne":["$$this",[null]]},"then":"$$this","else":[]}}]}}}}},{"$unwind":"$formData"},{"$replaceRoot":{"newRoot":"$formData"}},])

Result