Database
db={collection:[{"_id":1,"name":"aa1","price":10,"quantity":2,"category":["coffe"]},{"_id":2,"name":"aa2","price":20,"quantity":1,"category":["coffe","snack"]},{"_id":3,"name":"aa3","price":5,"quantity":10,"category":["snack","coffe"]},{"_id":4,"name":"aa4","price":5,"quantity":20,"category":["coffe","cake"]},{"_id":5,"name":"aa5","price":10,"quantity":10,"category":["animal","dog"]},{"_id":6,"name":"aa6","price":5,"quantity":5,"category":["dog","animal"]},{"_id":7,"name":"aa7","price":5,"quantity":10,"category":["animal","cat"]},{"_id":8,"name":"aa8","price":10,"quantity":5,"category":["cat","animal"]}]}
Query
db.collection.aggregate([{$unwind:"$category"},{$sort:{_id:-1,category:-1}},{$group:{_id:"$_id",category:{$push:"$category"},price:{$first:"$price"},quantity:{$first:"$quantity"}}},{$group:{_id:"$category",sum:{$sum:{$multiply:["$price","$quantity"]}}}},{$project:{_id:0,mySet:"$_id",total:"$sum"}},{$sort:{total:-1}}])