Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

애그리게이션 및 연산자 고려 사항

이 페이지의 내용

  • $geonear
  • $merge
  • $out
  • 자주 사용하는 작업
  • 예제
  • 월별 평균 가격 계산
  • 30 일 동안의 롤링 평균 계산

일부 집계 단계 및 연산자는 time series 컬렉션과 함께 사용할 때 특별한 고려가 필요합니다.

시계열 컬렉션은 2dsphere 인덱스에 대한 쿼리에서 $geoNear 지리 공간적 데이터 를 정렬하기 위한 집계 단계만 지원 합니다. time series 컬렉션에는 $nearSphere$near 연산자를 사용할 수 없습니다.

$merge 집계 단계는 다른 컬렉션의 데이터를 time series 컬렉션에 추가하는 데 사용할 수 없습니다.

MongoDB 7.0 부터는 $out 집계 단계를 사용하여 time series 컬렉션 에 문서를 쓰기 (write) 수 있습니다. 자세한 내용 은 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
}

다음 구조의 문서가 포함된 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
}

돌아가기

쿼리