我有一个这样的MongoDB集合:
[
{
"_id": 1,
"price": 1
},
{
"_id": 2,
"price": 2
},
{
"_id": 3,
"price": 3
},
{
"_id": 4,
"price": 4
},
{
"_id": 5,
"price": 5
},
{
"_id": 6,
"price": 6
}
]
我想自己计算标准差(我知道有一个内置的运算符,但我想更改一些参数,所以我自己实现它).
我计算了连续平均值,但如何使用setWindowFields阶段中的最后一个平均值:
const aggregation1 = [
{
$setWindowFields: {
sortBy: {
_id: 1
},
output: {
mean: {
$avg: "$price",
window: {
documents: [-4, 0]
}
}
}
}
},
{
$setWindowFields: {
sortBy: {
_id: 1
},
output: {
field_new: {
$sum: [
"$price",
{ $last: "$mean" } //Gives error
],
window: {
documents: [-4, 0]
}
}
}
}
}
];
db.collection.aggregate(aggregation);
我希望执行一个文件中的每个价格字段(总和)上的操作,与最后的手段. 例如,x5的x1+平均值、x5的x2+平均值、x10的x6+平均值、x10的x7+平均值、……
就像我们在标准差公式中所做的那样:价格和平均价格之间差值的平方之和.
以下是预期输出应该是什么样子:
[
{
"_id": 1,
"price": 1
},
{
"_id": 2,
"price": 2
},
{
"_id": 3,
"price": 3
},
{
"_id": 4,
"price": 4
},
{
"_id": 5,
"price": 5,
"field_new": 8 // 5 + 3 (3=(1+2+3+4+5)/5 mean from last 5 docs)
},
{
"_id": 6,
"price": 6,
"field_new": 10 // 6 + 4 (4=(2+3+4+5+6)/5 mean from last 5 docs)
}
]