Database
db={"user":[{_id:"user1",questionId:100,mail:"abc@gmail.com"},{_id:"user2",questionId:400,mail:"xyz@gmail.com"}],answer:[{_id:1,userId:"user1",answer1:"ok",answer2:"bad",answer3:"great"},{_id:2,userId:"user1",answer1:"ok",answer2:"ok",answer3:"bad"},{_id:3,userId:"user2",answer1:"ok",answer2:"Not good",answer3:"great"},{_id:4,userId:"user2",answer1:"ok",answer2:"bad",answer3:"great"},{_id:5,userId:"user2",answer1:"ok",answer2:"bad",answer3:"bad"}]}
Query
db.user.aggregate([{$lookup:{from:"answer",localField:"_id",foreignField:"userId",as:"join"}},{$unwind:"$join"},{$group:{_id:"$_id",mail:{$first:"$mail"},ans:{$push:{answer1:"$join.answer1",answer2:"$join.answer2",answer3:"$join.answer3"}}}},{$addFields:{ans:{$reduce:{input:{$map:{input:"$ans",in:{$objectToArray:"$$this"}}},initialValue:[],in:{$concatArrays:["$$value","$$this"]}}}}},{$unwind:"$ans"},{$group:{_id:{userId:"$_id",mail:"$mail",k:"$ans.k",v:"$ans.v"},count:{$sum:1}}},{$group:{_id:{userId:"$_id.userId",mail:"$_id.mail",k:"$_id.k"},total:{$sum:"$count"},ans:{$push:{k:"$_id.k",v:"$_id.v",count:"$count"}}}},{$addFields:{ans:{$map:{input:"$ans",in:{$arrayToObject:[[{k:"$$this.v",v:"$$this.count"},{k:"percentage",v:{$floor:{$multiply:[{$divide:["$$this.count","$total"]},100]}}}]]}}}}},{$group:{_id:{userId:"$_id.userId",mail:"$_id.mail"},ans:{$push:{k:"$_id.k",v:"$ans"}}}},{$addFields:{_id:1,mail:"$_id.mail",userId:"$_id.userId",ans:{$arrayToObject:"$ans"}}}])