Database

db={trx:[{id:1,trxid:"100",subitem:1,clazz:"A"},{id:2,trxid:"100",subitem:2,clazz:"A"},{id:3,trxid:"100",subitem:3,clazz:"B"},{id:4,trxid:"200",subitem:1,clazz:"B"}],classes:[{id:1,clazz:"A",applicable:"y"},{id:2,clazz:"B",applicable:"n"}]}

Query

db.trx.aggregate([{$group:{_id:{clazz:"$clazz",trxid:"$trxid"},total:{$sum:1},}},{$lookup:{from:"classes",as:"clazz",let:{clazzName:"$_id.clazz"},pipeline:[{$match:{$expr:{$eq:["$$clazzName","$clazz"]}}},{$project:{applicable:{$eq:["$applicable","y"]}}}]}},{$group:{_id:"$_id.trxid",subitemCount:{$sum:"$total"},applicableCount:{$sum:{$cond:[{$eq:[{$arrayElemAt:["$clazz.applicable",0]},true]},"$total",0]}},nonApplicableCount:{$sum:{$cond:[{$eq:[{$arrayElemAt:["$clazz.applicable",0]},false]},"$total",0]}}}}])

Result