Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb 具有不同密钥计数的mongo聚合框架_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb 具有不同密钥计数的mongo聚合框架

Mongodb 具有不同密钥计数的mongo聚合框架,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我已经回顾了与上述主题相关的几个答案和示例(包括其他),但找不到一个可用于回答我的要求的工作示例: 我有一个包含多个维度(描述性属性)和度量的文档集合。我希望计算某个键值在某组其他键中的外观(唯一)数量。i、 e.有多少运动员来自一个国家并说某种语言 文件结构: { "date": "2013-06-13T00:00:00.000Z" "Operating System": "Windows 7", "Browser": "Chrome", "Device": "Desktop/

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

我有一个包含多个维度(描述性属性)和度量的文档集合。我希望计算某个键值在某组其他键中的外观(唯一)数量。i、 e.有多少运动员来自一个国家并说某种语言

文件结构:

{
  "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

非常感谢。

试试:

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

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

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

Hi@MustafaGenç,我正在使用上述技术,但是我希望实现一个小的更改,如果上面的问题有
COUNT(Distinct Player)
,我如何更改您的答案以获得每组玩家的数量?然后,使用普通的Distinct查询。不需要骨料。感谢@MustafaGenç,这就是我最后所做的,只是出于好奇,这是可以用agg框架做到的吗?如果你运行上面的聚合查询,聚合输出结果的大小将给你计数。如果我想得到不同玩家的计数,这是行不通的。如果文档中有同一
国家
语言
的多个玩家ID,则只需给出玩家ID的计数即可。如何获得distinct
玩家的计数
?我想sql应该是
选择国家、语言、count(distinct Player)作为玩家计数,从表组中按国家、语言进行计数