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",jeje:"meow",personId:"112"}]

Query

db.collection.aggregate([{$group:{_id:{$cond:["$$ROOT.userId",{userId:"$userId"},{personId:"$personId"}]},docs:{$push:"$$ROOT"}}},{$project:{seen:{$filter:{"input":"$docs",as:"d",cond:{$eq:["$$d.status","seen"]}}},unseen:{$filter:{"input":"$docs",as:"d",cond:{$eq:["$$d.status","unseen"]}}}}},{$group:{_id:null,seenAll:{$sum:{$cond:[{$and:[{$ne:[{$size:"$seen"},0]},{$eq:[{$size:"$unseen"},0]}]},1,0]}},unseenOneOrMore:{$sum:{$cond:[{$ne:[{$size:"$unseen"},0]},1,0]}}}},{$project:{"seenAll":1,"unseenOneOrMore":1,_id:0,avSeen:{$trunc:[{$multiply:[{$divide:["$seenAll",{$sum:["$seenAll","$unseenOneOrMore"]}]},100]},2],},},}])

Result