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})

または似たようなもの。

集約して " by" を実行する必要があると思われる場合は$group(コードが元のドキュメントで既にグループ化されている場合でも)、コレクションからいくつかのサンプル ドキュメントを提供してください (mongo シェルを介して実行db.daily_analytic.find().limit(2).pretty()して貼り付けることができます)。質問に出力します)、事前に計算していない値の集計の可能性がある場所を簡単に確認できます。

于 2012-11-04T21:34:05.463 に答える