Database

db={"Vote":[{postId:"1",comment:{text_sentiment:"positive",topic:"A"}},{postId:"2",comment:{text_sentiment:"negative",topic:"A"}},{postId:"3",comment:{text_sentiment:"positive",topic:"B"}},],"post":[{_id:"1",category:"a"},{_id:"2",category:"b",}]}

Query

db.Vote.aggregate([{$match:{"comment.topic":{$exists:1},}},{$group:{_id:{topic:"$comment.topic",text_sentiment:"$comment.text_sentiment"},total:{$sum:1},postIds:{$push:"$postId"}}},{$group:{_id:"$_id.topic",total:{$sum:"$total"},text_sentiments:{$push:{k:"$_id.text_sentiment",v:"$total"}},postIds:{"$push":"$postIds"}}},{$project:{topic:"$_id",topicOccurance:"$total",sentiment:{"$arrayToObject":"$text_sentiments"},postIds:{$reduce:{input:"$postIds",initialValue:[],in:{$concatArrays:["$$value","$$this"]}}}}},{$sort:{"topicOccurance":-1}},{$lookup:{from:"post",localField:"postIds",foreignField:"_id",as:"categories"}},{$addFields:{postIds:{"$setUnion":"$postIds"},categories:{"$setUnion":{$map:{input:"$categories",in:"$$this.category"}}}}}])

Result