0

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

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}]}
4

1 回答 1

0

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

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

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

或类似的东西。

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

于 2012-11-04T21:34:05.463 回答