Definición
Nuevo en la versión 5.0.
Devuelve el promedio móvil exponencial de datos 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 valores no numéricos, valores null, y 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 $setWindowFields para generar la media móvil exponencial de los precios de las acciones ponderados para dos documentos históricos (dos días para los documentos de ejemplo) utilizando N establecido en 2:
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 <a class=\" \" target=\" \" href=\" \"> N establecido2en:En los documentos de entrada, hay un documento por cada día y los documentos se ordenan por
date. Por lo tanto, con N establecido en2, elpriceen el documento actual y elpriceen el documento anterior, si está disponible, se les asigna el peso más alto 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 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 para los precios de las acciones en un nuevo campo llamadoexpMovingAvgForStock, como se muestra en los siguientes resultados. El valor para alfa se establece en0.75en la fórmula de 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 }