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([{$group:{_id:null,seen:{$addToSet:{"$cond":{"if":{$eq:["seen","$status"]},"then":{"$ifNull":["$userId","$personId"]},else:"$$REMOVE"}}},unseen:{$addToSet:{"$cond":{"if":{$eq:["unseen","$status"]},"then":{"$ifNull":["$userId","$personId"]},else:"$$REMOVE"}}}}},{$project:{_id:0,seenAll:{$size:{"$setDifference":["$seen","$unseen"]}},unseenOneOrMore:{$size:"$unseen"},averageSeenCount:{"$multiply":[{"$divide":[{$size:{"$setDifference":["$seen","$unseen"]}},{$size:{$setUnion:["$seen","$unseen"]}}]},100]}}}])

Result