Mongodb查询以计算按其他字段分组的唯一字段的数量

时间:2019-04-11 23:12:26

标签: mongodb mongoose

我有一个看起来像这样的模型

Product={
  brand :String,
  model:String,
  price:String,
  variant:String}

我需要一个查询,该查询将返回每个品牌的od型号的数量。 例如,假设集合中填充了以下数据

{brand: "bmw", model:"x5", variant:"200hp", price:"30000"}
{brand: "bmw", model:"x5", variant:"300hp", price:"40000"}
{brand: "bmw", model:"x3", variant:"100hp", price:"15000"}
{brand: "fiat", model:"punto", variant:"100hp", price:"10000"}
{brand: "fiat", model:"punto", variant:"80hp", price:"9000"}

我需要一个查询,该查询将返回followig数据:

[{brand:"bmw", number_of_models:"2"}, {"brand":"fiat", number_of_models:"1"}]

任何帮助将不胜感激

1 个答案:

答案 0 :(得分:1)

您可以使用mongodb聚合查询$group。我已经使用了上面给出的示例数据并对其进行了测试。下面的查询工作正常。

Product.aggregate([
{
    $group: {
        _id: {
            "brand": "$brand",
            "model": "$model"
        },
    }
},
{
    $group: {
        _id: "$_id.brand",
        "number_of_models": { $sum: 1 }
    }
},
{
    $project: {
        _id: 0,
        brand: "$_id",
        number_of_models: 1
    }
}   
])

结果

    [{
        "number_of_models" : 2,
        "brand" : "bmw"
    },
    {
        "number_of_models" : 1,
        "brand" : "fiat"
    }]