expMovingAvg (์ง๊ณ)
์ ์
๋ฒ์ 5.0์ ์ถ๊ฐ.
๋จ๊ณ์์ ์ ์๋ $setWindowFields
ํํฐ์
์ ๋ฌธ์์ ์ ์ฉ๋ ์ซ์ํํ์ ์ ์ง์ ์ด๋ ํ๊ท ์ ๋ฐํํฉ๋๋ค.
$expMovingAvg
๋ $setWindowFields
์คํ
์ด์ง์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
$expMovingAvg
๊ตฌ๋ฌธ:
{ $expMovingAvg: { input: <input expression>, N: <integer>, alpha: <float> } }
$expMovingAvg
(์)๋ ๋ค์ ํ๋๊ฐ ์๋ ๋ฌธ์๋ฅผ ๊ฐ์ ธ์ต๋๋ค.
ํ๋ | ์ค๋ช
| ||
---|---|---|---|
ํ๊ฐํ ํํ์์ ์ง์ ํฉ๋๋ค. ์ซ์๊ฐ ์๋ ํํ์์ ๋ฌด์๋ฉ๋๋ค. | |||
์ง์ ์ด๋ ํ๊ท ๊ณ์ฐ์์ ์ํ์ ๊ฐ์ค์น๊ฐ ํฐ ๊ธฐ๋ก ๋ฌธ์ ์๋ฅผ ์ง์ ํ๋ N ๋๋ alpha ์ค ํ๋๋ฅผ ์ง์ ํด์ผ ํฉ๋๋ค. ๋ ๋ค ์ง์ ํ ์๋ ์์ต๋๋ค. ์ด ์์์์๋
| |||
์ง์์ ๊ฐ์ ๊ฐ์ ์ง์ ํ๋ N ๋๋ 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 } ] )
๋ค์์ ์ฌ์ฉํ ์ง์ ์ด๋ ํ๊ท N
์ด ์์์์๋ $setWindowFields
๋จ๊ณ์ $expMovingAvg
๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๊ธฐ๋ก ๋ฌธ์ (์์ ๋ฌธ์์ ๊ฒฝ์ฐ 2์ผ)์ ๊ฐ์ค์น๋ฅผ ์ ์ฉํ ์ฃผ๊ฐ์ ๋ํ ์ง์ ์ด๋ ํ๊ท ์ ์ถ๋ ฅํฉ๋๋ค. ์ด๋ N์ 2
๋ก ์ค์ ๋์ด ์์ต๋๋ค.
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
N ์ด2
๋ก ์ค์ ๋ ์ฃผ์price
ํ๋์ ๋ํ ์ง์ ์ด๋ ํ๊ท ์ ๋ฐํํฉ๋๋ค.์ ๋ ฅ ๋ฌธ์์๋ ๋งค์ผ ํ๋์ ๋ฌธ์๊ฐ ์์ผ๋ฉฐ ๋ฌธ์๋
date
๊ธฐ์ค์ผ๋ก ์ ๋ ฌ๋ฉ๋๋ค. ๋ฐ๋ผ์ N์ด2
๋ก ์ค์ ๋๋ฉด ์ง์ ์ด๋ ํ๊ท ๊ณต์์์ ํ์ฌ ๋ฌธ์์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 }
๋ค์์ ์ฌ์ฉํ ์ง์ ์ด๋ ํ๊ท alpha
์ด ์์ ์์๋ $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 }