エラーのコレクションがあるので、すべてのエラーにはdate
フィールドが含まれます。エラーを日ごとに集計/カウント/グループ化するにはどうすればよいですか(つまり、時刻を除外しますか)?いくつかのスマートな投影法を適用する必要があると思います。
これを行うには、次の集計演算子を使用します。
これにより、各日付のエラーカウントが得られます。
db.errors.aggregate(
{ $group : {
_id: {
year : { $year : "$date" },
month : { $month : "$date" },
day : { $dayOfMonth : "$date" },
},
count: { $sum: 1 }
}}
);
この例では、エラードキュメントの日付フィールドがdate
で、タイプが BSON Date であると想定しています。 MongoDBにはTimestamp型もありますが、この型の使用は ドキュメント によって明示的に推奨されていません。
注:BSON Timestampタイプは、MongoDBの内部使用向けです。ほとんどの場合、アプリケーション開発では、BSON日付タイプを使用します。詳細については、日付を参照してください。
$ project(aggregation) を使用して、タイムスタンプフィールドを特定の日付形式の文字列に変換できます。
aggregate([
{
'$project': {
newFieldName: {'$dateToString': {format: '%Y-%m-%d', date: '$yourDateFieldName'}}
}
}, {
'$group': {
_id: {newFieldName: '$newFieldName'},
viewCount: {'$sum': 1}
}
},
{'$sort': {'_id.newFieldName': 1}}
], {})