Я пытаюсь объединить свои данные за день, чтобы я мог отобразить его на диаграмме. Мне удалось сделать это успешно, группируя $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
, если это имеет значение.