我正在尝试按天聚合我的数据,以便我可以在图表中呈现它。我已成功通过$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
。
答案 0 :(得分:19)
假设您按年,月,日,小时和分钟分组文档是无用的,您可以使用其中一个运算符来获取日期样本:$first
,$last
,{ {1}}或$min
。
$max
您将拥有一个任意小时,分钟和秒的日期字段。