Database
db={"suggestions":[{"id":"sid"}],"votes":[{"suggestionId":"sid","voteType":"upVote","user":{"id":"apiCallUserId"}},{"suggestionId":"sid","voteType":"downVote","user":{"id":"broadcasterUserId"}},{"suggestionId":"sid","voteType":"noVote","user":{"id":"noVoteUserId"}},]}
Query
db.suggestions.aggregate([{$match:{id:"sid"}},{$lookup:{from:"votes",localField:"id",foreignField:"suggestionId",as:"votes"}},{$addFields:{hasUpvoted:{$filter:{input:"$votes",cond:{$eq:["apiCallUserId","$$this.user.id"]}}},broadcasterUpvoted:{$filter:{input:"$votes",cond:{$eq:["broadcasterUserId","$$this.user.id"]}}}}},{$project:{_id:1,id:1,votesLength:{$reduce:{input:"$votes",initialValue:0,in:{$add:["$$value",{$switch:{branches:[{case:{$eq:["$$this.voteType","upVote"]},then:1},{case:{$eq:["$$this.voteType","downVote"]},then:-1},],default:0}}]}}},broadcasterUpvoted:{$arrayElemAt:["$broadcasterUpvoted",0]},hasUpvoted:{$arrayElemAt:["$hasUpvoted",0]}}}])