mongodb mapreduce聚合解决方案或合并到替代方案中

时间:2013-03-03 03:30:30

标签: node.js mongodb

以下是我尝试实现的逻辑,但我发现很难找到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的新手,如果你们能提出解决方案/替代方案,那就太棒了。

1 个答案:

答案 0 :(得分:0)

是的,使用map-reduce计算标准偏差很棘手,因为您需要将每个数据值与传统算法中的平均值进行比较。

根据并行计算algorithmhttps://gist.github.com/RedBeard0531/1886960

查看此解决方案