我正在使用 mongoose 开发 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}}