我有一个这样的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);
我期待着执行一个文件中的每个价格字段的操作(总和),最后的意思。例如x1+ x5处的平均值,x2 + x5处的平均值,...,x6 + x10处的平均值,x7 + x10处的平均值,...
就像我们在标准差公式中做的那样:价格与平均价格之差的平方和。
下面是预期输出的样子:
[
{
"_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)
}
]
2条答案
按热度按时间xxb16uws1#
**编辑:**对于具有预期输出的更新问题:
了解它在playground example上的工作原理
**原题:**一个选项是添加另一个具有相反方向排序的
$setWindowFields
步骤:了解它在playground example上的工作原理
t1qtbnec2#
你在找这个吗: