【问题标题】:How to use aggregation famework of mongodb 2.2 with pre-aggregated report/collection如何将 mongodb 2.2 的聚合框架与预聚合报告/集合一起使用
【发布时间】:2012-10-20 15:05:09
【问题描述】:

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

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 数据进行分组,为此我尝试了以下方式,但没有尝试

[
    {'$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}]}

【问题讨论】:

  • 首先,您需要使用 $project 来创建您想要“$group”的文档 - 例如,这就是 $substr 等运算符用于构建新字段的地方。其次 - 您似乎希望按天而不是按小时分组,并查看当天的平均呼叫次数,查看您想要的输出?您能否提供您收藏的示例文档并确认您想要的输出分组/类型?

标签: django mongodb pymongo aggregation-framework


【解决方案1】:

按照您执行此操作的方式,您已经在文档中获得了所有可用的每小时呼叫计数。

由于您要为每次通话增加日期文档中的字段,如果您这样做:

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

或类似的东西。

如果您觉得需要汇总并执行“$group by”(即使您的代码已经在原始文档中预先分组),请提供您集合中的几个示例文档(通过 mongo shell 您只需执行db.daily_analytic.find().limit(2).pretty() 并将输出粘贴到您的问题中),然后就可以更容易地查看您没有预先计算的值的聚合可能性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-27
    • 2020-04-08
    • 2020-05-14
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多