Voici la logique que je suis en train de mettre en œuvre, mais je trouve vraiment difficile de trouver un moyen avec application MongoDB/Node.jsmongodb solution d'agrégation de MapReduce ou de fusion en remplacement
Data: country, state, val1
Je dois calculer moyenne et std. déviation en utilisant la formule ci-dessous. J'ai vérifié d'autres postes de débordement de la pile, mais la formule std dev que je travaille n'est pas le même:
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)
le problème est à l'écart moyen doit être calculé. Il me semble que j'ai besoin d'une agrégation pour Mean avant de calculer l'écart/std dev à travers Map réduire ce que je ne trouve pas un moyen de calculer. Quelqu'un pourrait-il suggérer un moyen de faire cela?
Si ce n'est pas possible, avons-nous un moyen d'émettre une instruction de mise à jour dans mongodb similaire à la requête de fusion traditionnelle ci-dessous? Je mettrai à jour la valeur moyenne pour toutes les lignes et invoquerai plus tard Mapreduce pour la deviation/std dev.
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
Je suis assez nouveau pour le NoSQL et nodejs et ce serait bien si vous les gars pourrait suggérer une solution/alternative.
Merci encore Johnny! l'algorithme de calcul parallèle et l'échantillon de github produisent juste le même résultat que la logique std dev traditionnelle que je cherchais! – user1549605