在变量json结构中与mongodb聚合的最佳方法

时间:2014-03-13 15:26:59

标签: json mongodb aggregation-framework

我有许多报告都是用以下json结构构建的 日期/国家/供应商,其中日期/国家/供应商是变量,实际数据存储在此json树的叶子上。

例如,简化的json将在下面看

 {
   "1/2/2001" :
   {  
     "DE": {
            "Vendor A" : { 
                          leaf data... 
                          revenue:123213
                          }
            "Vendor B" : { 
                          leaf data... 
                          revenue:123213
                          }
            }
   }

现在,假设我想汇总收入。有没有办法使用Mongo的聚合框架快速完成此操作,或者我依赖于执行三个嵌套for循环。

提前致谢,

2 个答案:

答案 0 :(得分:1)

看起来这个agg框架中的这个功能是有计划的。见https://jira.mongodb.org/browse/SERVER-5947

您仍然可以使用map reduce。

答案 1 :(得分:1)

如果您可以将JSON构建为:

{
    "date": "1/2/2001",
    "country": "DE",
    "vendors": [
        {
            "vendor": "Vendor A",
            "leafdata": "xxx",
            "revenue": 123213
        },
        {
            "vendor": "Vendor b",
            "leafdata": "xxx",
            "revenue": 123213
        }
    ]
}

然后使用聚合框架轻松实现,您可以进行如下查询:

[{
    $unwind: '$vendors'
},
{
    $group: {
        _id: '$country',
        revenue: {
            $sum: '$vendors.revenue'
        }
    }
}]

这将为您收藏的所有国家/地区带来收入。

注意:我只使用日期作为字符串,但我建议使用ISODate。