Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

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

이 페이지의 내용

  • $geoNear
  • $merge
  • $out
  • 자주 사용하는 작업
  • 예시
  • 월 평균 가격 계산
  • 30일 동안의 이동 평균 계산

일부 집계 단계 및 연산자를 Time Series 컬렉션과 함께 사용할 때는 특별히 고려해야 합니다.

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

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

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
}

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

돌아가기

쿼리