Database

[{"addr":"address1","book":"book1"},{"addr":"address2","book":"book1"},{"addr":"address1","book":"book5"},{"addr":"address1","book":"book2"},{"addr":"address3","book":"book9"},{"addr":"address2","book":"book5"},{"addr":"address2","book":"book1"},{"addr":"address1","book":"book1"},{"addr":"address15","book":"book1"},{"addr":"address9","book":"book99"},{"addr":"address90","book":"book33"},{"addr":"address4","book":"book3"},{"addr":"address4","book":"book2"},{"addr":"address5","book":"book1"},{"addr":"address77","book":"book11"},{"addr":"address1","book":"book1"}]

Query

db.collection.aggregate([{$group:{_id:{book:"$book",addr:"$addr"},count:{$sum:1}}},{$sort:{"_id.addr":1,count:-1}},{$group:{_id:"$_id.addr",totalCount:{$sum:"$count"},books:{$push:{book:"$_id.book",count:"$count"}}}},{$sort:{totalCount:-1}},{$limit:3},{$set:{addr:"$_id",_id:"$$REMOVE",books:{$slice:["$books",0,2]}}}])

Result