Database

db={"poll":[{"_id":100,"choices":[{"name":"choiceA","id":0},{"name":"choiceB","id":1},{"name":"choiceC","id":2}]}],"castedvotes":[{"voter":"YulePale","choice":1,"pollId":100},{"voter":"Juzi","choice":0,"pollId":101},{"voter":"Juma","choice":0,"pollId":102},{"voter":"Jane","choice":0,"pollId":103},{"voter":"Jamo","choice":1,"pollId":104},{"voter":"Juju","choice":1,"pollId":105}]}

Query

db.poll.aggregate([{"$match":{"_id":100}},{"$lookup":{"from":"castedvotes","localField":"pollId","foreignField":"choices.id","as":"voters"}},{$project:{numberOfVotes:{$size:"$voters"},hasThisUserVoted:{$in:["$_id","$voters.pollId"]},/**How to calculate it?*/numberOfComments:{$multiply:[{$size:"$voters"},2]},castedVotesPerChoice:{$arrayToObject:{$map:{input:"$choices",as:"choice",in:{k:"$$choice.name",v:{$filter:{input:"$voters",as:"voter",cond:{$eq:["$$voter.choice","$$choice.id"]}}}}}}}}}])

Result