私は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}}