以下是我尝试实现的逻辑,但我发现很难找到MongoDB / Node.js app的方法
Data: country, state, val1
我需要计算平均值和标准值。偏差使用下面的公式。我检查了其他堆栈溢出帖子,但我工作的std dev公式不一样:
for each row -> group by country, state
mean = sum(val1)/count ->
for each row ->
deviation += Math.pow((val1 - mean), 2)
for each row -> group by country, state
std dev = Math.sqrt(dev/ count)
问题在于需要计算偏差的方式。在通过Map reduce计算偏差/ std dev之前我看起来需要一个Mean的聚合,我没有找到计算方法。有人可以建议一种方法吗?
如果不可能,我们是否有办法在mongodb中发布类似于以下传统合并查询的更新语句?我将更新所有行的平均值,稍后将调用Mapreduce作为偏差/标准开发。
merge into Tbl1 a using
(select b.country, b.state, sum(b.val1)/count(b.val1) as mean
from Tbl1 b
group by b.country, b.state) c
on (a.country = c.country and
a.state = c.state)
when matched
then update
set a.mean = c.mean
我是nosql和nodejs的新手,如果你们能提出解决方案/替代方案,那就太棒了。
答案 0 :(得分:0)
是的,使用map-reduce计算标准偏差很棘手,因为您需要将每个数据值与传统算法中的平均值进行比较。
根据并行计算algorithm:https://gist.github.com/RedBeard0531/1886960
查看此解决方案