문서 메뉴
문서 홈
/
MongoDB 매뉴얼
/ / /

expMovingAvg (집계)

이 페이지의 내용

  • 정의
  • 행동
  • 예제

버전 5.0에 추가.

$expMovingAvg

단계에서 정의된 $setWindowFields 파티션 의 문서에 적용된 숫자표현식 의 지수 이동 평균을 반환합니다.

$expMovingAvg$setWindowFields 스테이지에서만 사용할 수 있습니다.

$expMovingAvg 구문:

{
$expMovingAvg: {
input: <input expression>,
N: <integer>,
alpha: <float>
}
}

$expMovingAvg (은)는 다음 필드가 있는 문서를 가져옵니다.

필드
설명
입력

평가할 표현식을 지정합니다. 숫자가 아닌 표현식은 무시됩니다.

지수 이동 평균 계산에서 수학적 가중치가 큰 기록 문서 수를 지정하는 integer로, 가장 최근 문서가 가장 큰 가중치를 갖습니다.

반드시 N 또는 alpha를 지정해야 합니다. 둘 다 지정할 수는 없습니다.

이 수식에서는 N 값을 사용하여 현재 읽고 있는 문서의 표현식 값과 이전 계산 결과를 기반으로 현재 결과를 계산합니다.

current result = current value * ( 2 / ( N + 1 ) ) +
previous result * ( 1 - ( 2 / ( N + 1 ) ) )

지수적 감쇠 값을 지정하는 double로, 지수 이동 평균 계산에 사용합니다. alpha 값이 높을수록 이전 계산 결과에 더 낮은 수학적 유의성이 할당됩니다.

반드시 N 또는 alpha를 지정해야 합니다. 둘 다 지정할 수는 없습니다.

이 수식에서는 alpha 값을 사용하여 현재 읽고 있는 문서의 표현식 값과 이전 계산 결과를 기반으로 현재 결과를 계산합니다.

current result = current value * alpha +
previous result * ( 1 - alpha )

반드시 N 또는 alpha를 지정해야 합니다. 둘 다 지정할 수는 없습니다.

$expMovingAvg는 숫자가 아닌 값, null 값 및 누락된 필드를 무시합니다.

"MDB""MSFT" 주식의 가격이 포함된 stockPrices 컬렉션을 만듭니다.

db.stockPrices.insertMany( [
{ stock: "MDB", date: new Date( "2020-05-18T20:00:00Z" ), price: 13 },
{ stock: "MDB", date: new Date( "2020-05-19T20:00:00Z" ), price: 15.4 },
{ stock: "MDB", date: new Date( "2020-05-20T20:00:00Z" ), price: 12 },
{ stock: "MDB", date: new Date( "2020-05-21T20:00:00Z" ), price: 11.7 },
{ stock: "MSFT", date: new Date( "2020-05-18T20:00:00Z" ), price: 82 },
{ stock: "MSFT", date: new Date( "2020-05-19T20:00:00Z" ), price: 94 },
{ stock: "MSFT", date: new Date( "2020-05-20T20:00:00Z" ), price: 112 },
{ stock: "MSFT", date: new Date( "2020-05-21T20:00:00Z" ), price: 97.3 }
] )

이 예시에서는 $setWindowFields 단계의 $expMovingAvg를 사용하여 두 기록 문서 (예시 문서의 경우 2일)에 가중치를 적용한 주가에 대한 지수 이동 평균을 출력합니다. 이때 N2로 설정되어 있습니다.

db.stockPrices.aggregate( [
{
$setWindowFields: {
partitionBy: "$stock",
sortBy: { date: 1 },
output: {
expMovingAvgForStock: {
$expMovingAvg: { input: "$price", N: 2 }
}
}
}
}
] )

예를 들면 다음과 같습니다.

  • partitionBy: "$stock" 는 collection의 문서를 stock파티셔닝합니다. "MDB""MSFT"에 대한 파티션이 있습니다.

  • sortBy: { date: 1 } 각 파티션의 문서를 date을 기준으로 오름차순(1)으로 정렬하므로, 가장 이른 date이 첫 번째가 됩니다.

  • output N2 로 설정된 주식 price 필드에 대한 지수 이동 평균을 반환합니다.

    • 입력 문서에는 매일 하나의 문서가 있으며 문서는 date 기준으로 정렬됩니다. 따라서 N2로 설정되면 지수 이동 평균 공식에서 현재 문서의 price와 이전 문서의 price(사용 가능한 경우)에 가장 높은 가중치가 할당됩니다.

    • price 필드의 지수 이동 평균은 다음 결과와 같이 expMovingAvgForStocks라는 새 필드에 저장됩니다.

{ "_id" : ObjectId("60d11fef833dfeadc8e6286b"), "stock" : "MDB",
"date" : ISODate("2020-05-18T20:00:00Z"), "price" : 13,
"expMovingAvgForStock" : 13 }
{ "_id" : ObjectId("60d11fef833dfeadc8e6286c"), "stock" : "MDB",
"date" : ISODate("2020-05-19T20:00:00Z"), "price" : 15.4,
"expMovingAvgForStock" : 14.6 }
{ "_id" : ObjectId("60d11fef833dfeadc8e6286d"), "stock" : "MDB",
"date" : ISODate("2020-05-20T20:00:00Z"), "price" : 12,
"expMovingAvgForStock" : 12.866666666666667 }
{ "_id" : ObjectId("60d11fef833dfeadc8e6286e"), "stock" : "MDB",
"date" : ISODate("2020-05-21T20:00:00Z"), "price" : 11.7,
"expMovingAvgForStock" : 12.088888888888889 }
{ "_id" : ObjectId("60d11fef833dfeadc8e6286f"), "stock" : "MSFT",
"date" : ISODate("2020-05-18T20:00:00Z"), "price" : 82,
"expMovingAvgForStock" : 82 }
{ "_id" : ObjectId("60d11fef833dfeadc8e62870"), "stock" : "MSFT",
"date" : ISODate("2020-05-19T20:00:00Z"), "price" : 94,
"expMovingAvgForStock" : 90 }
{ "_id" : ObjectId("60d11fef833dfeadc8e62871"), "stock" : "MSFT",
"date" : ISODate("2020-05-20T20:00:00Z"), "price" : 112,
"expMovingAvgForStock" : 104.66666666666667 }
{ "_id" : ObjectId("60d11fef833dfeadc8e62872"), "stock" : "MSFT",
"date" : ISODate("2020-05-21T20:00:00Z"), "price" : 97.3,
"expMovingAvgForStock" : 99.75555555555556 }

이 예제에서는 $setWindowFields 단계에서 $expMovingAvg를 사용하여 알파0.75로 설정한 주가의 지수 이동 평균을 출력합니다.

db.stockPrices.aggregate( [
{
$setWindowFields: {
partitionBy: "$stock",
sortBy: { date: 1 },
output: {
expMovingAvgForStock: {
$expMovingAvg: { input: "$price", alpha: 0.75 }
}
}
}
}
] )

예를 들면 다음과 같습니다.

  • partitionBy: "$stock" 는 collection의 문서를 stock파티셔닝합니다. "MDB""MSFT"에 대한 파티션이 있습니다.

  • sortBy: { date: 1 } 각 파티션의 문서를 date을 기준으로 오름차순(1)으로 정렬하므로, 가장 이른 date이 첫 번째가 됩니다.

  • output 다음 결과와 같이 expMovingAvgForStock 이라는 새 필드에서 주가에 대한 지수 이동 평균을 설정합니다. 지수 이동 평균 공식 에서 알파값은 로 설정됩니다.0.75

{ "_id" : ObjectId("60d11fef833dfeadc8e6286b"), "stock" : "MDB",
"date" : ISODate("2020-05-18T20:00:00Z"), "price" : 13,
"expMovingAvgForStock" : 13 }
{ "_id" : ObjectId("60d11fef833dfeadc8e6286c"), "stock" : "MDB",
"date" : ISODate("2020-05-19T20:00:00Z"), "price" : 15.4,
"expMovingAvgForStock" : 14.8 }
{ "_id" : ObjectId("60d11fef833dfeadc8e6286d"), "stock" : "MDB",
"date" : ISODate("2020-05-20T20:00:00Z"), "price" : 12,
"expMovingAvgForStock" : 12.7 }
{ "_id" : ObjectId("60d11fef833dfeadc8e6286e"), "stock" : "MDB",
"date" : ISODate("2020-05-21T20:00:00Z"), "price" : 11.7,
"expMovingAvgForStock" : 11.95 }
{ "_id" : ObjectId("60d11fef833dfeadc8e6286f"), "stock" : "MSFT",
"date" : ISODate("2020-05-18T20:00:00Z"), "price" : 82,
"expMovingAvgForStock" : 82 }
{ "_id" : ObjectId("60d11fef833dfeadc8e62870"), "stock" : "MSFT",
"date" : ISODate("2020-05-19T20:00:00Z"), "price" : 94,
"expMovingAvgForStock" : 91 }
{ "_id" : ObjectId("60d11fef833dfeadc8e62871"), "stock" : "MSFT",
"date" : ISODate("2020-05-20T20:00:00Z"), "price" : 112,
"expMovingAvgForStock" : 106.75 }
{ "_id" : ObjectId("60d11fef833dfeadc8e62872"), "stock" : "MSFT",
"date" : ISODate("2020-05-21T20:00:00Z"), "price" : 97.3,
"expMovingAvgForStock" : 99.6625 }
← exp (집계)

이 페이지의 내용