Ich versuche, meine Daten am Tag zu aggregieren, damit ich sie in einem Diagramm rendern kann. Ich habe es geschafft, dies erfolgreich durch Gruppierung von $year
, $month
und $dayOfMonth
zu tun. Das bedeutet jedoch, dass mein Datum nun im Endergebnis in drei Teile aufgeteilt ist. Gibt es eine Möglichkeit, die drei Zahlen wieder in ein Datumsformat zu konvertieren oder gibt es eine andere Möglichkeit, nach Tagen zu gruppieren, bei denen das Datum nicht geteilt wird? Im Folgenden finden Sie ein funktionierendes Beispiel von dem, was ich habe:
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);
});
Und hier ist ein Beispielergebnis:
[
{
"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
}
]
Im Idealfall würde Ich mag date
ein gültiges Datum sein haben, so habe ich nicht um es später zu konvertieren. Ich habe versucht, $concat
zu verwenden, aber das funktioniert nur mit Zeichenfolgen. Ich verwende Mongoose
, wenn das einen Unterschied macht.
Das ist, was ich gesucht habe. Vielen Dank! –
Warum funktioniert das? –