source

집계 프레임워크에서 전체 타임스탬프가 제공될 때 날짜별로 집계하는 방법은 무엇입니까?

nicesource 2023. 7. 3. 22:58
반응형

집계 프레임워크에서 전체 타임스탬프가 제공될 때 날짜별로 집계하는 방법은 무엇입니까?

오류 모음이 있으므로 모든 오류는 다음이 포함됩니다.date필드. DAY만(즉, 하루 중 시간 제외)으로 오류를 집계/카운트/그룹화하려면 어떻게 해야 합니까?제 생각에는, 어떤 똑똑한 투영법이 적용되어야 할 것 같습니다.

다음 집계 연산자를 사용하여 이 작업을 수행할 수 있습니다.

각 날짜에 대한 오류 수가 표시됩니다.

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

이 예제에서는 오류 문서의 날짜 필드를 다음과 같이 가정합니다.dateBSON Date 유형입니다.MongoDB에도 Timestamp 유형이 있지만 이 유형의 사용은 설명서에서 명시적으로 권장하지 않습니다.

참고: BSON 타임스탬프 유형은 내부 MongoDB용입니다.대부분의 경우 응용프로그램 개발에서 BSON 날짜 유형을 사용할 수 있습니다.자세한 내용은 날짜를 참조하십시오.

$project(집계)를 사용하여 타임스탬프 필드를 특정 날짜 형식의 문자열로 변환할 수 있습니다.

aggregate([
    {
        '$project': {
            newFieldName: {'$dateToString': {format: '%Y-%m-%d', date: '$yourDateFieldName'}}
        }
    }, {
        '$group': {
            _id: {newFieldName: '$newFieldName'},
            viewCount: {'$sum': 1}
        }
    }, 
    {'$sort': {'_id.newFieldName': 1}}
], {})

mongo 2.6이 있기 때문에 $dateToString 함수는 에서 사용할 수 있습니다.aggregate그런 식으로:

db.errors.aggregate([   
 {
   $group : {
    _id: { $dateToString: { format: "%Y-%m-%d", date: "$date" }},
    count: { $sum: 1 }
   }
 }
]);

언급URL : https://stackoverflow.com/questions/15657501/how-to-aggregate-by-date-when-a-full-timestamp-is-given-in-aggregation-framework

반응형