グラフに表示できるように、データを日ごとに集計しようとしています。$year
、$month
、および でグループ化することで、これをうまく行うことができました$dayOfMonth
。ただし、これは、最終結果で私の日付が 3 つの部分に分割されることを意味します。3 つの数値を連結して日付形式に戻す方法はありますか、または日付を分割しない日ごとにグループ化する別の方法はありますか? 以下は、私が持っているものの実際の例です。
Sentiment.aggregate([
{
$match: { 'content.term' : term_id }
}, {
$group: {
_id: {
year : { $year : '$created_at' },
month : { $month : '$created_at' },
dayOfMonth : { $dayOfMonth : '$created_at' },
},
sum : { $sum : '$score'},
count : { $sum : 1 }
},
}, {
$project: {
_id : 0,
date : '$_id',
sum : 1,
count : 1,
avg : { $divide: ['$sum', '$count'] }
}
}
], function(err, result){
if(err) callback(err);
else callback(null, result);
});
サンプルの結果は次のとおりです。
[
{
"sum": 201,
"count": 3,
"date": {
"year": 2013,
"month": 7,
"dayOfMonth": 5
},
"avg": 67
},
{
"sum": 186,
"count": 6,
"date": {
"year": 2013,
"month": 7,
"dayOfMonth": 8
},
"avg": 31
},
{
"sum": 834,
"count": 9,
"date": {
"year": 2013,
"month": 7,
"dayOfMonth": 9
},
"avg": 92.66666666666667
}
]
理想的にはdate
、有効な日付にしたいので、後で変換する必要はありません。使ってみまし$concat
たが、文字列でしか機能しません。それが違いを生む場合、私は使用しMongoose
ています。