32

エラーのコレクションがあるので、すべてのエラーにdateフィールドがあります。エラーを日のみで集計/カウント/グループ化するにはどうすればよいですか(つまり、時刻を除外します)?いくつかのスマートプロジェクションを適用する必要があると思います。

4

3 に答える 3

62

これを行うには、次の集計演算子を使用します。

これにより、各日付のエラー数がわかります。

db.errors.aggregate(
    { $group : {
        _id: {
            year : { $year : "$date" },        
            month : { $month : "$date" },        
            day : { $dayOfMonth : "$date" },
        },
        count: { $sum: 1 }
    }}
);

この例では、エラードキュメントの日付フィールドがBSONDatedateタイプであると想定しています。MongoDBにはタイムスタンプタイプもありますが、このタイプの使用はドキュメントによって明示的に推奨されていません。

注:BSONタイムスタンプタイプは、MongoDBの内部で使用するためのものです。ほとんどの場合、アプリケーション開発では、BSON日付型を使用する必要があります。詳細については、日付を参照してください。

于 2013-03-27T13:13:39.363 に答える
9

$ project(aggregation)を使用して、タイムスタンプフィールドを特定の日付形式の文字列に変換できます。

aggregate([
    {
        '$project': {
            newFieldName: {'$dateToString': {format: '%Y-%m-%d', date: '$yourDateFieldName'}}
        }
    }, {
        '$group': {
            _id: {newFieldName: '$newFieldName'},
            viewCount: {'$sum': 1}
        }
    }, 
    {'$sort': {'_id.newFieldName': 1}}
], {})
于 2017-04-23T08:32:22.577 に答える
5

mongo 2.6には、次のように使用できる$dateToString関数があります。aggregate

db.errors.aggregate([   
 {
   $group : {
    _id: { $dateToString: { format: "%Y-%m-%d", date: "$date" }},
    count: { $sum: 1 }
   }
 }
]);
于 2020-06-05T11:26:04.693 に答える