Media móvil con MongoDB

41 views
Skip to first unread message

Porlaotracara

unread,
Sep 10, 2014, 10:25:44 AM9/10/14
to mongod...@googlegroups.com
Hola,

Se puede hacer una media móvil (moving average) en mongodb?? Mis documentos solo tienen dos campos. Mes y Unidades. La idea es obtener mes a mes la media móvil de los 3 anteriores.

He leído que se podría hacer con map reduce, pero no se por dónde empezar.

Mil gracias.

Frank Moreno

unread,
Sep 11, 2014, 10:29:36 AM9/11/14
to mongod...@googlegroups.com

La media móvil es una operación muy sencilla de hacer y al ser solo de los últimos 3 meses, puedes hacer un código rápido y exageradamente corto para lograrlo.

Lees los últimos 3 valores, los sumas, lo divides entre 3 y lo guardas.

--
Has recibido este mensaje porque estás suscrito al grupo "MongoDB Perú" de Grupos de Google.
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a mongodb-lima...@googlegroups.com.
Para publicar en este grupo, envía un correo electrónico a mongod...@googlegroups.com.
Visita este grupo en http://groups.google.com/group/mongodb-lima.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/mongodb-lima/b7e5b4a6-d230-4e89-99b9-f5851ae3af27%40googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Porlaotracara

unread,
Sep 15, 2014, 7:28:56 AM9/15/14
to mongod...@googlegroups.com, frank....@ieee.org
Gracias Frank,

Es que estoy empezando con Mongo, vamos con Json. Se cómo calcular la media móvil pero no cómo trasladarlo a Mongo con Map reduce. Me pasaron esta función, pero hasta ahora no ha funcionado como esperaba:

movingAverage = function(currentMonth, backMonths) {
    var result = db.visitsByMonth.aggregate([
      { "$match" : { "month" : { "$lte" : currentMonth, "$gte" : currentMonth - backMonths } } },
      { "$group" : { "_id" : 0, "sum" : { "$sum" : "$visits" }, "count" : { "$sum" : 1 } } },
      { "$project" : { "average" : { "$divide" : ["$sum", "$count"] } } }
    ])
    return result.toArray()[0].average
Reply all
Reply to author
Forward
0 new messages