Definition定义
New in version 5.0.在版本5.0中新增。
$expMovingAvg
Returns the exponential moving average of numeric expressions applied to documents in a partition defined in the 返回应用于$setWindowFields stage.$setWindowFields阶段中定义的分区中的文档的数值表达式的指数移动平均值。
$expMovingAvg is only available in the $setWindowFields stage.$expMovingAvg仅在$setWindowFields阶段可用。
$expMovingAvg syntax:语法:
{
$expMovingAvg: {
input: <input expression>,
N: <integer>,
alpha: <float>
}
}
$expMovingAvg takes a document with these fields:获取包含以下字段的文档:
input |
|
N |
|
alpha |
|
Behavior行为
You must specify either N or alpha. You cannot specify both.您必须指定N或alpha。您不能同时指定这两个。
$expMovingAvg ignores non-numeric values, 忽略非数值、null values, and missing fields.null值和缺少的字段。
Examples示例
Create a 创建一个stockPrices collection that contains prices for stocks named "MDB" and "MSFT":stockPrices集合,其中包含名为"MDB"和"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 }
] )
Exponential Moving Average Using N使用N的指数移动平均线
NThis example uses 此示例在$expMovingAvg in the $setWindowFields stage to output the exponential moving average for the stock prices weighted for two historical documents (two days for the example documents) using N set to 2:$setWindowFields阶段使用$expMovingAvg输出两个历史文档(示例文档为两天)加权股票价格的指数移动平均值,其中N设置为2:
db.stockPrices.aggregate( [
{
$setWindowFields: {
partitionBy: "$stock",
sortBy: { date: 1 },
output: {
expMovingAvgForStock: {
$expMovingAvg: { input: "$price", N: 2 }
}
}
}
}
] )
In the example:在示例中:
partitionBy: "$stock"partitions the documents in the collection by按stock. There are partitions for"MDB"and"MSFT".stock对集合中的文档进行分区。"MDB"和"MSFT"有分区。sortBy: { date: 1 }sorts the documents in each partition by按datein ascending order (1), so the earliestdateis first.date升序(1)对每个分区中的文档进行排序,因此最早的date位居前列。outputreturns the exponential moving average for the stock返回股票pricefield with N set to2:price字段的指数移动平均值,其中N设置为2:In the input documents, there is one document for each day and the documents are ordered by在输入文档中,每天有一个文档,文档按date.date排序。Therefore, with N is set to因此,当2, thepricein the current document and thepricein the previous document, if available, are allocated the highest weight in the exponential moving average formula.N设置为2时,在指数移动平均公式中,当前文档中的price和前一个文档中的定价(如果可用)被分配了最高的权重。The exponential moving average for thepricefield is stored in a new field calledexpMovingAvgForStocks, as shown in the following results.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 }Exponential Moving Average Using alpha使用alpha的指数移动平均线
alphaThis example uses 此示例在$expMovingAvg in the $setWindowFields stage to output the exponential moving average for the stock prices using alpha set to 0.75:$setWindowFields阶段使用$expMovingAvg,使用设置为0.75的alpha输出股票价格的指数移动平均线:
db.stockPrices.aggregate( [
{
$setWindowFields: {
partitionBy: "$stock",
sortBy: { date: 1 },
output: {
expMovingAvgForStock: {
$expMovingAvg: { input: "$price", alpha: 0.75 }
}
}
}
}
] )
In the example:在示例中:
partitionBy: "$stock"partitions the documents in the collection by按stock. There are partitions for"MDB"and"MSFT".stock对集合中的文档进行分区。"MDB"和"MSFT"有分区。sortBy: { date: 1 }sorts the documents in each partition by按datein ascending order (1), so the earliestdateis first.date升序(1)对每个分区中的文档进行排序,因此最早的date位居前列。outputsets the exponential moving average for the stock prices in a new field called在名为expMovingAvgForStock, as shown in the following results.expMovingAvgForStock的新字段中设置股票价格的指数移动平均线,如以下结果所示。The value for alpha is set to在指数移动平均公式中,0.75in the exponential moving average formula.alpha的值设置为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 }