Estrategias para agregaciones en tiempo real en MongoDB

Al explorar formas de hacer análisis en tiempo real con MongoDB, parece que hay una forma bastante estándar de hacer sumas, pero nada en términos de agregación más compleja. Algunas cosas que han ayudado ...

Rainbird de Twitter: Sumas en tiempo real, incrementando los contadores en las claves jerárquicamente. Cassandra. Yahoo S4 yfuent: Aún no estoy seguro de cómo funciona exactamente, pero parece que se trata de reducción de mapas en tiempo real. Básicamente, por cada registro que se agrega, lo pasa a un mapeador, lo convierte en un hash y eso lo envía para que se integre en el documento del informe.http: //www.slideshare.net/dacort/mongodb-realtime-data-collection-and-stats-generatio Colibrí

l enfoque básico para hacer sumas es incrementar atómicamente las claves de documento para cada nuevo registro que ingrese, para almacenar en caché las consultas comunes:

Stats.collection.update({"keys" => ["a", "b", "c"]}, {"$inc" => {"counter_1" => 1, "counter_2" => 1"}, "upsert" => true);

Sin embargo, esto no funciona para agregados que no sean sumas. Mi pregunta es, ¿se puede hacer algo como esto para promedios, min y max en mongodb?

Diga que tiene un documento como este:

{
  :date => "04/27/2011",
  :page_views => 1000,
  :user_birthdays => ["12/10/1980", "6/22/1971", ...] # 1000 total
}

Podría hacer alguna operación atómica u optimizada / en tiempo real que agrupara los cumpleaños en algo como esto?

{
  :date => "04/27/2011",
  :page_views => 1000,
  :user_birthdays => ["12/10/1980", "6/22/1971", ...], # 1000 total
  :average_age => 27.8,
  :age_rank => {
    "0 to 20" => 180,
    "20 to 30" => 720,
    "30 to 40" => 100,
    "40 to 50" => 0
  }
}

... tal como puedes hacerDoc.collection.update({x => 1}, {"$push" => {"user_birthdays" => "12/10/1980"}}) para agregar algo a una matriz, y no tener que cargar el documento, ¿puede hacer algo así para promediar / agregar la matriz? ¿Hay algo en este sentido que use para la agregación en tiempo real?

MapReduce se usa para hacer esto en trabajos de procesamiento por lotes, estoy buscando patrones para algo como reducción de mapas en tiempo real para:

Promedios: cada vez que inserta un nuevo elemento en una matriz en mongodb, ¿cuál es la mejor manera de promediar esos valores en tiempo real?Agrupamient: si agrupa la edad para paréntesis de 10 años y tiene una matriz de edades, ¿cómo podría actualizar de manera óptima el recuento de cada grupo a medida que actualiza el documento con la nueva era? digamos que la matriz de edades se empujará / extraerá constantemente.Mínimo máxim: ¿cuáles son algunas formas de calcular y almacenar el mínimo / máximo de esa matriz de edades en ese documento?