$expMovingAvg(集計)
定義
バージョン 5.0 で追加
ステージで定義された パーティション$setWindowFields
内のドキュメントに適用された数値 式 の指数移動平均を返します。
$expMovingAvg
は$setWindowFields
ステージでのみ使用可能です。
$expMovingAvg
構文:
{ $expMovingAvg: { input: <input expression>, N: <integer>, alpha: <float> } }
$expMovingAvg
次のフィールドを持つドキュメントを取ります。
フィールド | 説明 |
---|---|
評価する式を指定します。 数値以外の式は無視されます。 | |
動作
Nまたはaltedのいずれかを指定する必要があります。 両方を指定することはできません。
$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
この例では ステージの$expMovingAvg
を使用して、 N を に設定して、2 つの履歴ドキュメント(サンプル ドキュメントは 2 日間)に重みを加えた株価の指数移動平均を出力します。$setWindowFields
2
db.stockPrices.aggregate( [ { $setWindowFields: { partitionBy: "$stock", sortBy: { date: 1 }, output: { expMovingAvgForStock: { $expMovingAvg: { input: "$price", N: 2 } } } } } ] )
この例では、次のことが行われます。
partitionBy: "$stock"
はコレクション内のドキュメントをstock
で分割します。"MDB"
と"MSFT"
のパーティションがあります。sortBy: { date: 1 }
は、各パーティション内のドキュメントをdate
で昇順(1
)に並べ替えるので、最も古いdate
が最初になります。output
は、 Nが2
に設定されている株式price
フィールドの指数移動平均を返します。入力ドキュメントでは、1 日ごとに 1 つのドキュメントがあり、ドキュメントは
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
この例では、 ステージの$expMovingAvg
$setWindowFields
を使用して、 アルファベット を に設定して株価の指数移動平均を出力します。0.75
db.stockPrices.aggregate( [ { $setWindowFields: { partitionBy: "$stock", sortBy: { date: 1 }, output: { expMovingAvgForStock: { $expMovingAvg: { input: "$price", alpha: 0.75 } } } } } ] )
この例では、次のことが行われます。
partitionBy: "$stock"
はコレクション内のドキュメントを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 }