Mongodb聚合:不同计数

Mongodb聚合:不同计数,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我对聚合框架相当陌生,有点卡住了。我希望有人能给我一些建议。我已将数据整理成以下表格: { "python" : "2.7.9", "ACmanagerversion" : "TBD", "ACstatusmanager" : "0.13", "ACversion" : "0.9.2" } { "python" : "2.7.9", "ACmanagerversion" : "TBD", "ACstatusmanager" :

我对聚合框架相当陌生,有点卡住了。我希望有人能给我一些建议。我已将数据整理成以下表格:

{ 
    "python" : "2.7.9", 
    "ACmanagerversion" : "TBD", 
    "ACstatusmanager" : "0.13", 
    "ACversion" : "0.9.2"
}
{ 
    "python" : "2.7.9", 
    "ACmanagerversion" : "TBD", 
    "ACstatusmanager" : "0.16", 
    "ACversion" : "0.9.1"
}
{ 
    "python" : "2.7.9", 
    "ACmanagerversion" : "1.1", 
    "ACstatusmanager" : "0.16", 
    "ACversion" : "0.9.1"
}
{ 
    "python" : "2.7.4", 
    "ACmanagerversion" : "1.3", 
    "ACstatusmanager" : "0.16", 
    "ACversion" : "0.9.1"
}
我想返回表格(或类似表格)的数据:

(即统计所有唯一事件)

通过运行:

{
    $group: {
        "_id" : "$python", version_count: { $sum: 1 }
    }
}
我明白了


我只是在转换成一个更“通用”的解决方案时遇到了一点困难,在这个解决方案中,我可以自动计算出软件的各个部分,而不必为每种类型指定一个。

可能会出现重复的声音,就像你想要计算不同的键值对一样。也许“”会帮助你。如果您事先知道要计算哪些字段,我建议您查找这些字段。这样可以在单个聚合阶段在同一组输入文档上构建多个子管道。因此,您可以在每个子管道中放置您的组阶段,以获得每种软件类型的计数。可能的重复听起来像您想要计数不同的键值对。也许“”会帮助你。如果您事先知道要计算哪些字段,我建议您查找这些字段。这样可以在单个聚合阶段在同一组输入文档上构建多个子管道。因此,您可以将您的小组阶段放在每个子管道中,以获得每种软件类型的计数。
{
    $group: {
        "_id" : "$python", version_count: { $sum: 1 }
    }
}
{ 
    "_id" : "2.7.6", 
    "version_count" : 1.0
}
{ 
    "_id" : "2.7.9", 
    "version_count" : 36.0
}