mongo聚合框架,具有多个group by的密钥计数

时间:2013-07-10 07:23:05

标签: mongodb aggregation-framework

我已经回顾了几个与上述主题相关的答案和示例(包括SO),但找不到用于回答我的要求的工作示例:

我有一系列包含多个维度(描述性属性)和指标的文档。我希望计算特定键值在某组其他键中的出现次数(唯一)。即有多少玩家来自一个国家并说一种语言。

文件结构:

{
  "date": "2013-06-13T00:00:00.000Z"
  "Operating System": "Windows 7",
  "Browser": "Chrome",
  "Device": "Desktop/Laptop",
  "Country": "Afghanistan",
  "Language": "English",
  "Player": "91823781188577408" //This is a string value, the player id
},
...

请求结果:

{
  "Country": "Afghanistan",
  "Language": "English",
  "PlayerCount": 120
}

在SQL中,这可能是:

SELECT Country, Language, COUNT(DISTINCT PlayerCount) FROM Table 
GROUP BY Country, Language

我对聚合的最新尝试涉及$ project,$ group和$ unwind的几种类型,遗憾的是,没有工作,添加它们没有多大价值。请注意,我正在使用基于聚合框架而不是map-reduce的解决方案。

非常感谢。

1 个答案:

答案 0 :(得分:9)

尝试:

db.YOUR_COLLECTION.aggregate([
    {
        $group: {
            _id: {
                Country: "$Country",
                Language: "$Language"
            },

            PlayerCount: {$sum: 1}
        }
    }
]);

国家/地区和语言将位于“_id”字段内。