4

我已经查看了与上述主题相关的几个答案和示例(包括关于 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 的解决方案。

非常感谢。

4

1 回答 1

9

尝试:

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

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

国家和语言将在“_id”字段内。

于 2013-07-10T10:16:53.917 回答