Database

[{"key":1},{"key":2,"name_id":null,"age_id":null},{"key":3,"name_id":"foo","age_id":"foo"},{"key":4,"name_id":"doo"},{"key":5,"age_id":"doo"},]

Query

db.collection.aggregate([{$group:{_id:{/** Group by bool, has both name_id and age_id*/hasIdOrAge:{$and:[{$toBool:"$name_id"},{$toBool:"$age_id"}]}},/** Count sum*/count:{$sum:1}}},/** Rework to only output one object with both counts*/{$group:{_id:null,has:{$sum:{$cond:["$_id.hasIdOrAge","$count",0]}},hasNot:{$sum:{$cond:["$_id.hasIdOrAge",0,"$count"]}}}}])

Result