Pracuję nad projektem nodejs + mongodb przy użyciu mangusty. Teraz natknąłem się na pytanie, na które nie znam odpowiedzi. Używam struktury agregacji, aby uzyskać pogrupowane wyniki. Grupowanie odbywa się w dniu z wyłączeniem pola danych czasu, takiego jak: "2013 02 06". Kod wygląda następująco:Sortuj według daty w ramce agregacji mangusty
MyModel.aggregate([
{$match: {$and: [{created_date: {$gte: start_date}}, {created_date: {$lte: end_date}}]}},
{$group: {
_id: {
year: {$year: "$created_at"},
month: {$month: "$created_at"},
day: {$dayOfMonth: "$created_at"}
},
count: {$sum: 1}
}},
{$project: {
date: {
year: "$_id.year",
month:"$_id.month",
day:"$_id.day"
},
count: 1,
_id: 0
}}
], callback);
Pogrupowane wyniki są doskonałe, z tym że nie są posortowane. Oto przykład wyjście:
[
{
count: 1,
date: {
year: 2013,
month: 2,
day: 7
}
},
{
count: 1906,
date: {
year: 2013,
month: 2,
day: 4
}
},
{
count: 1580,
date: {
year: 2013,
month: 2,
day: 5
}
},
{
count: 640,
date: {
year: 2013,
month: 2,
day: 6
}
}
]
wiem, sortowanie odbywa się poprzez dodanie tego: {$sort: val}
. Ale teraz nie jestem pewien, co powinno być val
, więc wyniki będą sortowane według daty, ponieważ mój klucz grupujący jest obiektem 3 wartości budujących datę. Czy ktoś wie, jak można to osiągnąć?
EDIT tryed to i to zadziałało :)
{$sort: {"date.year":1, "date.month":1, "date.day":1}}
Myślę, że możesz również zrobić grupę korekcji '{$ sort: {" date ": 1}}' – knowbody