10

グラフに表示できるように、データを日ごとに集計しようとしています。$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ています。

4

1 に答える 1