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}}},{$group:{_id:"$_id.addr",totalCount:{$sum:"$count"},books:{$topN:{output:{book:"$_id.book",count:"$count"},sortBy:{"count":-1},n:2}}}},{$sort:{totalCount:-1}},{$limit:3},{$project:{addr:"$_id",_id:0,books:1,totalCount:1}}])

Result