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:{path:"$join",preserveNullAndEmptyArrays:true}},{$group:{_id:"$_id",A1:{$push:"$join.answer1"},A2:{$push:"$join.answer2"},A3:{$push:"$join.answer3"},unique1:{$addToSet:"$join.answer1"},unique2:{$addToSet:"$join.answer2"},unique3:{$addToSet:"$join.answer3"}}},{$addFields:{answer1:{$map:{input:"$unique1",in:{k:"$$this",v:{$let:{vars:{ans:"$$this"},in:{$size:{$filter:{input:"$A1",cond:{$eq:["$$ans","$$this"]}}}}}}}}},answer2:{$map:{input:"$unique2",in:{k:"$$this",v:{$let:{vars:{ans:"$$this"},in:{$size:{$filter:{input:"$A2",cond:{$eq:["$$ans","$$this"]}}}}}}}}},answer3:{$map:{input:"$unique3",in:{k:"$$this",v:{$let:{vars:{ans:"$$this"},in:{$size:{$filter:{input:"$A3",cond:{$eq:["$$ans","$$this"]}}}}}}}}}}},{$addFields:{answer1:{$map:{input:"$answer1",in:{$mergeObjects:[{$arrayToObject:[["$$this"]]},{percentage:{$round:{$multiply:[100,{$divide:["$$this.v",{$size:"$A1"}]}]}}}]}}},answer2:{$map:{input:"$answer2",in:{$mergeObjects:[{$arrayToObject:[["$$this"]]},{percentage:{$round:{$multiply:[100,{$divide:["$$this.v",{$size:"$A2"}]}]}}}]}}},answer3:{$map:{input:"$answer3",in:{$mergeObjects:[{$arrayToObject:[["$$this"]]},{percentage:{$round:{$multiply:[100,{$divide:["$$this.v",{$size:"$A3"}]}]}}}]}}}}},{$project:{A1:0,A2:0,A3:0,unique1:0,unique2:0,unique3:0}}])

Result