sort agregacion mongodb mapreduce

sort - mongodb agregacion



Usando el mapa de MongoDB/reducir a "agrupar por" dos campos (1)

Necesito algo un poco más complejo que los ejemplos en los documentos de MongoDB y parece que no puedo envolver mi cabeza en eso.

Supongamos que tengo una colección de objetos del formulario {date: "2010-10-10", type: "EVENT_TYPE_1", user_id: 123, ...}

Ahora quiero obtener algo similar a una consulta SQL GROUP BY, agrupando por fecha y tipo. Es decir, quiero el número de eventos de cada tipo en cada día. Además, me gustaría hacerlo único por user_id, es decir. Si un usuario tiene más eventos en el mismo día, cuéntelos solo una vez.

Estoy tratando de hacer esto con el mapa / reducir.

hago

db.logs.mapReduce( function() { emit(this.type, 1); }, function(k, vals) { var total = 0; for (var i = 0; i < vals.length; i++) total += vals[i]; return total; } )

que bien agrupa por tipo, pero ahora, ¿cómo puedo agrupar por fecha al mismo tiempo? Parece que la clave en emit () no puede ser una matriz (pensé en hacer emit([this.date, this.type], 1) ). Además, ¿cómo puedo garantizar la singularidad por usuario?

Estoy empezando con MongoDB y todavía tengo problemas para comprender los conceptos básicos. Además, no hay mucha documentación disponible por ahí. Cualquier ayuda de usuarios más experimentados es apreciada. ¡Gracias!


Encontré una muy buena solución en el libro de cocina de MongoDB (no conocía este recurso antes).

http://cookbook.mongodb.org/patterns/unique_items_map_reduce/

Básicamente, para agrupar por varias teclas, usas un dictado, no una lista (como lo intenté). Además, para obtener resultados únicos, debe hacer dos pases de mapa / reducción.