Database
[{_id:"478",status:"seen",userId:"101"},{_id:"991",status:"seen",userId:"101"},{_id:"125",status:"unseen",userId:"101"},{_id:"663",status:"seen",userId:"112"},{_id:"778",status:"seen",userId:"112"},{_id:"452",status:"seen",personId:"113"}]
Query
db.collection.aggregate([{"$addFields":{"userId":{$ifNull:["$userId","$personId"]}}},{$sort:{userId:1,status:-1}},{$group:{_id:"$userId",status:{$first:"$status"}}},{$group:{_id:null,seenCount:{$sum:{$cond:[{$eq:["$status","seen"]},1,0]}},unseenCount:{$sum:{$cond:[{$eq:["$status","unseen"]},1,0]}}}},{"$addFields":{averageSeenCount:{"$multiply":[{"$divide":["$seenCount",{"$add":["$seenCount","$unseenCount"]}]},100]}}}])