如何使用mongodb 2.2的聚合框架与预聚合报告/集合

时间:2012-10-31 07:28:04

标签: django mongodb pymongo aggregation-framework

我有以下方式的预聚合集合:

DAILY_ANALYTIC.update(
{
  "_id": id_daily,
  "metadata": {"date": d,},
},
{
  "$inc": {
      "call_daily": 1,
      "call_hourly.%d" % (hour,): 1,
      "call_minute.%d.%d" % (hour, minute,): 1,                
    }
}, upsert=True)

我想对call_hourly数据进行分组&为此,我尝试了以下方式但不是wotking

[
    {'$match': query_var},
    {'$group': {
        '_id': {'$substr': ['$_id', 0, 8]},            
        'call_per_hour': {'$addToSet' : '$call_hourly'},            
        }
    },
    {'$project': {            
        'call_per_hour': 1,            
        }
    },        
    {'$sort': {
        '_id': -1,            
        }
    }
]

知道如何获得像

这样的结果
data['result'] = {'_id': '20121102', 'call_per_hour':[{u'3': 5, u'12': 6}]}

data['result'] = {'_id': '20121102', 'call_per_hour':[{u'0': 5, u'1': 6, u'2': 4,....,u'23': 2}]}

1 个答案:

答案 0 :(得分:0)

您执行此操作的方式,您已经拥有文档中所有可用的每小时通话次数。

由于您为每个通话增加了日期文件中的字段,如果您只是这样做:

db.daily_analytic.find({}, {"metadata.date":1, _id:0, call_hourly:1})

或类似的东西。

如果您认为需要聚合并执行“$group by”(即使您的代码已经在原始文档中预先分组了代码),请提供一些样本文档(通过mongo) shell你可以db.daily_analytic.find().limit(2).pretty()并将输出粘贴到你的问题中)然后更容易看到你没有预先计算的值的聚合可能性。