애그리게이션 및 연산자 고려 사항
일부 집계 단계 및 연산자를 Time Series 컬렉션과 함께 사용할 때는 특별히 고려해야 합니다.
$geoNear
Time Series 컬렉션은 2dsphere 인덱스에 대한 쿼리에서 지리 공간적 데이터를 정렬하기 위한 $geoNear
집계 단계만 지원합니다. Time Series 컬렉션에서는 $near
및 $nearSphere
연산자를 사용할 수 없습니다.
$merge
$merge
집계 단계는 다른 컬렉션의 데이터를 time series 컬렉션에 추가하는 데 사용할 수 없습니다.
$out
MongoDB 7.0부터 $out
집계 단계를 사용하여 문서를 Time Series 컬렉션에 쓸 수 있습니다. 자세한 내용은 Time Series 컬렉션으로 데이터 마이그레이션을 참조하세요.
자주 사용하는 작업
다음과 같은 집계 파이프라인 연산자 및 단계는 Time Series 데이터를 분석하는 데 자주 사용됩니다.
$dateAdd
: Date 객체에 지정된 시간을 추가합니다.$dateDiff
: 두 날짜 사이의 시간 차이를 반환합니다.$dateTrunc
: 특정 단위로 잘린 날짜를 반환합니다.$setWindowFields
: 지정된 창의 문서에서 계산을 실행합니다.
예시
월 평균 가격 계산
다음 구조의 문서가 포함된 dowJonesTickerData
컬렉션을 생각해 보겠습니다.
{ date: ISODate("2020-01-03T05:00:00.000Z"), symbol: 'AAPL', volume: 146322800, open: 74.287498, adjClose: 73.486023, high: 75.144997, low: 74.125, close: 74.357498 }
이 집계 파이프라인은 다음 조치를 수행합니다.
$dateTrunc
를 사용하여 각 문서의date
를 적절한 월로 자릅니다.$group
을 사용하여 문서를 월과 기호별로 그룹화합니다.$avg
를 사용하여 월별 평균 가격을 계산합니다.
db.dowJonesTickerData.aggregate( [ { $group: { _id: { firstDayOfMonth: { $dateTrunc: { date: "$date", unit: "month" } }, symbol: "$symbol" }, avgMonthClose: { $avg: "$close" } } } ] )
파이프라인은 각 문서에 특정 주식의 월별 평균 종가가 포함된 문서 세트를 반환합니다.
{ _id: { firstDayOfMonth: ISODate("2020-06-01T00:00:00.000Z"), symbol: 'GOOG' }, avgMonthClose: 1431.0477184545455 }, { _id: { firstDayOfMonth: ISODate("2021-07-01T00:00:00.000Z"), symbol: 'MDB' }, avgMonthClose: 352.7314293333333 }, { _id: { firstDayOfMonth: ISODate("2021-06-01T00:00:00.000Z"), symbol: 'MSFT' }, avgMonthClose: 259.01818086363636 }
30일 동안의 이동 평균 계산
다음 구조의 문서가 포함된 dowJonesTickerData
컬렉션을 생각해 보겠습니다.
{ date: ISODate("2020-01-03T05:00:00.000Z"), symbol: 'AAPL', volume: 146322800, open: 74.287498, adjClose: 73.486023, high: 75.144997, low: 74.125, close: 74.357498 }
이 집계 파이프라인은 다음 작업을 수행합니다.
$setWindowFields
를 사용하여 30일 동안의 창을 지정합니다.각 주식에 대해 마지막 30일 동안의 종가의 이동 평균을 계산합니다.
db.dowJonesTickerData.aggregate( [ { $setWindowFields: { partitionBy: { symbol : "$symbol" } , sortBy: { date: 1 }, output: { averageMonthClosingPrice: { $avg : "$close", window : { range : [-1, "current"], unit : "month" } } } } } ] )
파이프라인은 각 문서의 $averageMonthClosingPrice
필드에 특정 주식 종목 코드의 이전 달 종가 평균이 있는 문서 세트를 반환합니다.
{ date: ISODate("2020-01-29T05:00:00.000Z"), symbol: 'AAPL', volume: 216229200, adjClose: 80.014801, low: 80.345001, high: 81.962502, open: 81.112503, close: 81.084999, averageMonthClosingPrice: 77.63137520000001 }