Database
[{uid:ObjectId("63920f965d15e98e3d7c450c"),surveyId:"xxxxx",answers:[{answer:"A"},/** question 1 ‘s answer*/{answer:"B"},/** question 2 ‘s answer*/{answer:"C"}/** question 3 ‘s answer*/]},{uid:ObjectId("63920f965d15e98e3d7c451c"),surveyId:"xxxxx",answers:[{answer:"B"},/** question 1 ‘s answer*/{answer:"B"},/** question 2 ‘s answer*/{answer:"B"}/** question 3 ‘s answer*/]},{uid:ObjectId("63920f965d15e98e3d7c452c"),surveyId:"xxxxx",answers:[{answer:"A"},/** question 1 ‘s answer*/{answer:"B"},/** question 2 ‘s answer*/{answer:"A"}/** question 3 ‘s answer*/]}]
Query
db.collection.aggregate([{$unwind:{path:"$answers",includeArrayIndex:"index"}},{$group:{_id:{surveyId:"$surveyId",index:"$index",res:"$answers.answer"},count:{$sum:1}}},{$group:{_id:{surveyId:"$_id.surveyId",index:"$_id.index"},data:{$push:{answer:"$_id.res",count:"$count"}},all:{$sum:"$count"}}},{$project:{data:{$map:{input:"$data",in:{answer:"$$this.answer",percent:{$multiply:[{$divide:["$$this.count","$all"]},100]}}}},question:{$add:["$_id.index",1]},surveyId:"$_id.surveyId",_id:0}}])