Im работает над проектом nodejs + mongodb с использованием мангуста. Теперь я столкнулся с вопросом, на который я не знаю ответа. Я использую структуру агрегации для получения сгруппированных результатов. Группировка выполняется с датой, исключая поле данных времени, например: "2013 02 06". Код выглядит следующим образом:
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);
Сгруппированные результаты являются совершенными, за исключением того, что они не сортируются. Вот пример вывода:
[
{
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
}
}
]
Я знаю, что сортировка выполняется, добавляя следующее: {$sort: val}
. Но теперь я не уверен, что должно быть val
, поэтому результаты будут отсортированы по дате, так как мой ключ группировки представляет собой объект из 3 значений, строящих дату. Кто-нибудь знает, как это можно сделать?
ИЗМЕНИТЬ Попробовали это, и это сработало:)
{$sort: {"date.year":1, "date.month":1, "date.day":1}}