Database

db={"employees":[{"_id":"61b9f07300127afb99f8c1ea","title":"Developer","firstName":"Jack","lastName":"Strauss","managerIDs":["61cedf84800749316306c6da"],"deptID":"61b9f073267500832f5d94d0"},{"_id":"61cedf84800749316306c6da","title":"Sr. Developer","firstName":"Richard","lastName":"Haris","managerIDs":null,"deptID":"61b9f073267500832f5d94d0"},{"_id":"61cedf17800749316306c6cf","title":"Manager App Development","firstName":"Arnold","lastName":"Cliff","deptID":"61b9f073267500832f5d94d0"},{"_id":"61d4503e1223496ab8a5ae3c","title":"Developer","firstName":"Andrew","lastName":"Turner","managerIDs":["61cedf17800749316306c6cf","61cedf84800749316306c6da"],"deptID":"61b9f073267500832f5d94d0"}]}

Query

db.employees.aggregate([{/** managers won't have any managerIDs*/"$match":{"managerIDs.0":{"$exists":true}}},{/** get histogram of counts per managerID*/"$group":{"_id":null,"managerIDs":{"$accumulator":{"init":"function() {return new Object()}","accumulate":"function(state, mgrArray) {mgrArray.forEach((elem) => {state[elem] = state[elem] + 1 || 1}); return state}","accumulateArgs":["$managerIDs"],"merge":"function(state1, state2) {Object.entries(state2).forEach((key, val) => {state1[key] = state1[key] + val || val}); return state1}","finalize":"function(state) {const obj = Object.assign({},state); return Object.entries(obj).map(([key, val]) => {return {'_id':key, 'count':val}})}","lang":"js"}}}},{"$unwind":"$managerIDs"},{"$lookup":{"from":"employees","localField":"managerIDs._id","foreignField":"_id","as":"manager"}},{"$set":{"manager":{"$first":"$manager"}}},{/** format output*/"$project":{"_id":0,"title":"$manager.title","firstName":"$manager.firstName","lastName":"$manager.lastName","devCount":"$managerIDs.count"}}])

Result