Database
[{userId:1,"productType":"car"},{userId:1,"productType":"car"},{userId:1,"productType":"bus"},{userId:1,"productType":"bus"},{userId:2,"productType":"bus"},{userId:2,"productType":"bus"}]
Query
db.collection.aggregate([{"$facet":{"instructions":[{$group:{_id:{userId:"$userId",productType:"$productType"},productTypeCount:{$sum:1}}},{$group:{_id:"$_id.userId",mostPopularProduct:{$push:{_id:"$_id.productType",count:"$productTypeCount"}}}}]}}])