Definición
Nuevo en la versión 5.0.
Devuelve la media móvil exponencial de expresiones numéricas aplicadas a documentos en una partición definida en la etapa $setWindowFields.
$expMovingAvg solo está disponible en la $setWindowFields etapa.
$expMovingAvg sintaxis:
{ $expMovingAvg: { input: <input expression>, N: <integer>, alpha: <float> } }
$expMovingAvg toma un documento con estos campos:
Campo | Descripción | ||
|---|---|---|---|
Especifica la expresión a evaluar. Las expresiones no numéricas se ignoran. | |||
Un Debe especificar N o alpha. No puedes especificar ambos. El valor | |||
Un Debe especificar N o alpha. No puedes especificar ambos. El valor |
Comportamiento
Debe especificar N o alpha. No puedes especificar ambos.
$expMovingAvg ignora los valores no numéricos, null los valores y los campos faltantes.
Ejemplos
Crea una colección de stockPrices que contenga precios de acciones nombradas "MDB" y "MSFT":
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 } ] )
Promedio móvil exponencial utilizando N
Este ejemplo utiliza $expMovingAvg en la etapa para generar la media móvil exponencial de los precios de las $setWindowFields acciones ponderados para dos documentos históricos (dos días para los documentos de ejemplo) utilizando N establecido 2 en:
db.stockPrices.aggregate( [ { $setWindowFields: { partitionBy: "$stock", sortBy: { date: 1 }, output: { expMovingAvgForStock: { $expMovingAvg: { input: "$price", N: 2 } } } } } ] )
En el ejemplo:
partitionBy: "$stock"particiona los documentos de la colección enstock. Existen particiones para"MDB"y"MSFT".sortBy: { date: 1 }ordena los documentos de cada partición pordateen orden ascendente (1), de modo que eldatemás antiguo sea el primero.outputDevuelve la media móvil exponencial para elpricecampo de acciones con N establecido2en:En los documentos de entrada, hay un documento por cada día y los documentos están ordenados
datepor. Por lo tanto, con N establecido2en, alpricedel documento actual y alpricedel documento anterior, si están disponibles, se les asigna el mayor peso en la fórmula de promedio móvil exponencial.El promedio móvil exponencial para el campo
pricese almacena en un nuevo campo llamadoexpMovingAvgForStocks, como se muestra en los siguientes resultados.
{ "_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 }
Promedio móvil exponencial utilizando alpha
Este ejemplo utiliza $expMovingAvg en la etapa para generar la media móvil $setWindowFields exponencial de los precios de las acciones con un valor alfa establecido 0.75 en:
db.stockPrices.aggregate( [ { $setWindowFields: { partitionBy: "$stock", sortBy: { date: 1 }, output: { expMovingAvgForStock: { $expMovingAvg: { input: "$price", alpha: 0.75 } } } } } ] )
En el ejemplo:
partitionBy: "$stock"particiona los documentos de la colección enstock. Existen particiones para"MDB"y"MSFT".sortBy: { date: 1 }ordena los documentos de cada partición pordateen orden ascendente (1), de modo que eldatemás antiguo sea el primero.outputEstablece la media móvil exponencial para los precios de las acciones en un nuevo campoexpMovingAvgForStockllamado, como se muestra en los siguientes resultados. El valor de alfa se establece0.75en en la fórmula de la media móvil exponencial.
{ "_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 }