MongoDB在多个字段上聚合

时间:2018-01-06 16:43:19

标签: node.js mongodb

我只有RDBS的经验。可以通过多个字段聚合字段。

t_example:

country  |  city   |   val  |  useless
---------------------------------------
Ger      |  Ber    |    10  |    abc
Ger      |  Ber    |    10  |    abc
Ger      |  MU     |    10  |    abc
FR       |  Par    |    10  |    abc

SELECT country,city,sum(val)FROM t_example GROUP BY country,city;

=>

country  |  city   |   val  
----------------------------
Ger      |  Ber    |    20  
Ger      |  MU     |    10  
FR       |  Par    |    10  

如果集合在JSON文件中包含相同的值,是否可以通过MongoDB获得相同的结果? 我在NodeJS上试过这个:

dbs.collection('t_example').aggregate([{ $group: { "_id": "$country","count":{$sum:1}}}]).toArray(function(error,result){
            res.json(result);       
        });

我得到了一个类似的结果:

[{"_id":"Ger","count":30},{"_id":"Fr","count":10}]

是否可以通过其他字段(城市)细分数据? 我也无法更改密钥(_id)。否则结果是一个空数组。

1 个答案:

答案 0 :(得分:1)

您可以使用以下管道。

[
  { $group: { 
    _id: { country: "$country", city: "$city" }, 
    val: { $sum: "$val" } 
  } }
]

事实上,对于小组赛阶段,_id can be a structured object

生成的文档看起来像这样。

[
    {
        "_id" : {
            "country" : "Fr",
            "city" : "Par"
        },
        "val" : 10.0
    },
    {
        "_id" : {
            "country" : "Ger",
            "city" : "MU"
        },
        "val" : 10.0
    },
    {
        "_id" : {
            "country" : "Ger",
            "city" : "Ber"
        },
        "val" : 20.0
    }
]