[ TIL & MongoDB] 시간 간격을 두고 데이터를 취합하기

Frontend Dev Diary·2021년 3월 11일
0

요즘 회사에서 MongoDB를 새로 접하고 있다. 이런 형식의 query는 처음 작성해보는데, 편리한 연산자들이 많아서 쓸만한 것 같다!
날짜가 뒤죽박죽 섞여있는 mongoDB에서, 시간 간격을 두고 데이터를 어떻게 가져올 수 있을까?

db.테이블이름.aggregate([
    {$group: {
        _id: {
            interval: {
                $subtract: [
                    { $year: '$DATE'}, 
                    { $mod: [{ $year: "$DATE"}, 2]} 
                ]
            }
        },
        count: { $sum: 1}
    }},
    {$sort: { _id: 1 } }
])

interval이란 id를 두고 group을 만들면 된다. 여기서는 DATE 중 year($year operator 사용)을 가져와서 이를 기준으로 2년 간격으로 데이터를 묶고 있다.
예를 들어서, 2014 - 2015 - 2016 - 2017 순으로 있다고 했을 때, $mod는 1이나 0만을 return할 것이므로 $subtract의 결과값 또한 $year - 1 이거나 $year이 된다.
그 결과 interval은 2014 - 2014 - 2016 - 2016가 될 것이고, 이를 _id로 사용하여 그룹을 만들면 2년 간격으로 그룹이 만들어지게 된다.

결과
분 단위, 초 단위에서도 모두 쉽게 적용이 가능한 방법이고, 여기에 $avg, $sum 등을 적절히 사용하면 15분 동안의 평균값 구하기 등의 응용이 가능하다.

참고 자료: https://stackoverflow.com/questions/26814427/group-result-by-15-minutes-time-interval-in-mongodb

profile
성장하는 프론트엔드 개발자

0개의 댓글

관련 채용 정보