Database

[{"_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([{"$match":{}},{"$group":{"_id":{$function:{body:"function(arr) { return arr.sort((a,b) =>a.localeCompare(b))}",args:["$category"],lang:"js"}},"sum":{"$sum":{"$multiply":["$price","$quantity"]}}}},{"$sort":{sum:-1}}])

Result