Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$expMovingAvg(集計)

項目一覧

  • 定義
  • 動作

バージョン 5.0 で追加

$expMovingAvg

ステージで定義された パーティション$setWindowFields 内のドキュメントに適用された数値 式 の指数移動平均を返します。

$expMovingAvg$setWindowFieldsステージでのみ使用可能です。

$expMovingAvg 構文:

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

$expMovingAvg 次のフィールドを持つドキュメントを取ります。

フィールド
説明

評価するを指定します。 数値以外の式は無視されます。

指数移動平均の計算で重要な数学的重みを持つ履歴ドキュメントの数を指定するinteger 。最も重みを提供する最新のドキュメントが最も近いドキュメントです。

N または alted のいずれかを指定する必要があります。両方を指定することはできません。

この式ではN値を使用して、現在読み取られているドキュメントの値とその前の計算結果に基づいて現在の結果を計算します。

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

指数移動平均の計算で使用する指数関数の減少値を指定するdoublealphaの値が大きいほど、計算による以前の結果に対する数学的重要性は低くなります。

N または alted のいずれかを指定する必要があります。両方を指定することはできません。

この式ではalpha値を使用して、現在読み取られているドキュメントの値とその前の計算結果に基づいて現在の結果を計算します。

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

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 }
] )

この例では ステージの$expMovingAvg を使用して、 N を に設定して、2 つの履歴ドキュメント(サンプル ドキュメントは 2 日間)に重みを加えた株価の指数移動平均を出力します。$setWindowFields2

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 は、 N2に設定されている株式priceフィールドの指数移動平均を返します。

    • 入力ドキュメントでは、1 日ごとに 1 つのドキュメントがあり、ドキュメントは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 }

この例では、 ステージの$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 }

戻る

$exp

項目一覧