Мне нужно что-то немного более сложное, чем примеры в документах MongoDB, и я, похоже, не могу обернуть его вокруг.
Скажем, у меня есть набор объектов вида {date: "2010-10-10", type: "EVENT_TYPE_1", user_id: 123, ...}
Теперь я хочу получить что-то похожее на запрос SQL GROUP BY, группируя его как по дате, так и по типу. То есть, я хочу количество событий каждого типа в каждый день. Кроме того, я хотел бы сделать его уникальным по user_id, т.е. если у пользователя больше событий в тот же день, считайте его только один раз.
Я пытаюсь сделать это с помощью map/reduce.
Я делаю
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;
}
)
который красиво группируется по типу, но теперь, как я могу группировать по дате в одно и то же время? Кажется, что ключ в emit() не может быть массивом (я думал о выполнении emit([this.date, this.type], 1)
). Кроме того, как я могу обеспечить уникальность каждого пользователя?
Я только начинаю с MongoDB, и у меня все еще не получается понять основные понятия. Кроме того, там не так много документации. Любая помощь более опытных пользователей оценивается. Спасибо!