MongoDB聚合:如何使用$project重新组合日期?

MongoDB聚合:如何使用$project重新组合日期?,mongodb,mongoose,Mongodb,Mongoose,我试图按天汇总数据,以便在图表中显示。通过按$year、$month和$dayOfMonth进行分组,我成功地做到了这一点。然而,这意味着我的约会现在在最终结果中分为三部分。有没有办法将这三个数字重新组合成日期格式,或者有没有另一种不分割日期的按天分组的方法?以下是我所拥有的工作示例: Sentiment.aggregate([ { $match: { 'content.term' : term_id } }, { $group: {

我试图按天汇总数据,以便在图表中显示。通过按
$year
$month
$dayOfMonth
进行分组,我成功地做到了这一点。然而,这意味着我的约会现在在最终结果中分为三部分。有没有办法将这三个数字重新组合成日期格式,或者有没有另一种不分割日期的按天分组的方法?以下是我所拥有的工作示例:

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

假设,当您按年、月、日、小时和分钟对文档进行分组时,您可以使用其中一个操作符来获取日期示例:
$first
$last
$min
$max

Sentiment.aggregate([
    {
        $match: { 'content.term' : term_id }
    }, {
        $group: {
            _id: {
                year       : { $year       : '$created_at' },
                month      : { $month      : '$created_at' },
                dayOfMonth : { $dayOfMonth : '$created_at' },
            },
            dt_sample : { $first : '$created_at' },
            sum   : { $sum : '$score'},
            count : { $sum : 1 }
        },
    }, {
        $project: {
            _id   : 0,
            date  : '$dt_sample',
            sum   : 1,
            count : 1,
            avg   : { $divide: ['$sum', '$count'] }
        }
    }
], function(err, result){
    if(err) callback(err);
    else callback(null, result);
});
您将有一个带有任意小时、分钟和秒的日期字段