Database
[{"name":"Clint","hairColor":"brown",shoeSize:8,income:20000},{"name":"Clint","hairColor":"blond",shoeSize:9,income:30000},{"name":"George","hairColor":"brown",shoeSize:7,income:30000},{"name":"George","hairColor":"blond",shoeSize:8,income:10000},{"name":"George","hairColor":"blond",shoeSize:9,income:20000}]
Query
db.collection.aggregate([{$group:{_id:{name:"$name",hairColor:"$hairColor"},count:{$sum:1},sumShoeSize:{$sum:"$shoeSize"},avgShoeSize:{$avg:"$shoeSize"},avgIncome:{$avg:"$income"},docs:{$push:"$$ROOT"}}},{$group:{_id:"$_id.name",count:{$sum:"$count"},sumShoeSize:{$sum:"$sumShoeSize"},shoeSizeByHairColor:{$push:{_id:"$_id.hairColor",counts:"$count",avgShoeSize:"$avgShoeSize"}},incomeByHairColor:{$push:{_id:"$_id.hairColor",counts:"$count",avgIncome:"$avgIncome"}}}},{$project:{_id:1,count:1,avgShoeSize:{$divide:["$sumShoeSize","$count"]},shoeSizeByHairColor:1,incomeByHairColor:1}}])