Definición
Nuevo en la versión 5.0.
Devuelve el promedio móvil exponencial de valores numéricos. expresiones aplicadas a documentos en una partición definida en la $setWindowFields etapa.
$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 que se evaluará. Las expresiones no numéricas se ignoran. | |||
Un Debe especificar N o alfa. No puede especificar ambos. El | |||
Un Debe especificar N o alfa. No puede especificar ambos. El |
Comportamiento
Debe especificar N o alfa. No puede especificar ambos.
$expMovingAvg ignora los valores no numéricos, null los valores y los campos faltantes.
Ejemplos
Cree una colección stockPrices que contenga los precios de las acciones denominadas "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 el promedio 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 el promedio móvil exponencial para elpricecampo de acciones con N establecido2en:En los documentos de entrada, hay un documento por cada día y están ordenados
datepor. Por lo tanto, si N se establece2en, elpricedel documento actual y elpricedel documento anterior, si están disponibles, reciben la mayor ponderación en la fórmula de media móvil exponencial.El promedio móvil exponencial del 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 el promedio móvil $setWindowFields exponencial de los precios de las acciones utilizando 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 de 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 }