Database

db={"users":[{"name":"David","messages":[1,2]},{"name":"Mia","messages":[3,4,5]}],"messages":[{"_id":1,"text":"hello","type":"PERSONAL"},{"_id":2,"text":"test","type":"DIRECT"},{"_id":3,"text":"hello worl","type":"DIRECT"},{"_id":4,"text":":-)","type":"PERSONAL"},{"_id":5,"text":"hi there","type":"DIRECT"}]}

Query

db.users.aggregate([{"$lookup":{"from":"messages","localField":"messages","foreignField":"_id","as":"messages","pipeline":[{"$group":{"_id":"$type","count":{"$sum":1}}}]}}])

Result