如何在 MongoDB 的单个查询中同时使用 distinct 和 aggregate?

How to use distinct and aggregate together in single query in MongoDB?

我的MongoDB文档如下

{
    "_id" : ObjectId("622126001b68d9136e48ba4a"),
    "brand_name" : "Sony",
    "brand_rating" : [
        {
            "cust_name" : "Amit K",
            "rating" : 4
        },
        {
            "cust_name" : "Raghu",
            "rating" : 4
        }
    ],
    "models" : [
        {
            "model_name" : "Sony Xperia Z2",
            "RAM" : "3GB",
            "ROM" : "32GB",
            "price" : 18000,
            "buyer" : [
                {
                    "cust_name" : "Amit K",
                    "rating" : 5
                },
                {
                    "cust_name" : "Raghu",
                    "rating" : 4
                }
            ]
        },
        {
            "model_name" : "Sony XP",
            "RAM" : "4GB",
            "ROM" : "64GB",
            "price" : 25000,
            "buyer" : [
                {
                    "cust_name" : "Amit K",
                    "rating" : 5
                },
                {
                    "cust_name" : "Raghu",
                    "rating" : 4
                }
            ]
        }
    ]
}

我尝试执行以下两个查询:

> db.brand.distinct("brand_name")

输出:[“索尼”、“三星”、“iPhone”]

db.brand.aggregate({$addFields : {total_rating : {$sum : "$brand_rating.rating"} }}, {$sort : {total_rating : -1}}, {$limit : 1 }, {$project : {_id : 0, brand_name : 1, total_rating : 1} })

输出:{“brand_name”:“iPhone”,“total_rating”:10}

我想在一个查询中获得两个输出 (期望的输出)

[ "Sony", "Samsung", "iPhone" ] { "brand_name" : "iPhone", "total_rating" : 10 }

最简单的方法是什么?

正如@rickhg12hs 所指出的,您可以使用 $facet 来获得类似的东西:

{
"brand_set": [
  "Sony"
],
"top_sum": {
  "brand_name": "Sony",
  "total_rating": 8
}

}

看游乐场:https://mongoplayground.net/p/84NadbPpDbe