Я новичок в картографировании / сокращении и пытаюсь найти способ сбора следующих данных, используя карту / уменьшение, вместо этого выполняя мою мою (медленную) логику приложения:
У меня есть коллекция 'проектов'с отношением 1: n к коллекции «задач».Теперь я хотел бы получить массив результатов, который дает мне названия проектов, где первый - это проект с наибольшим количеством задач, а последний - проект с наименьшим количеством задач.
Или, что еще лучше, массив хешей, который также сообщает мне, сколько задач имеет каждый проект (при условии, что имя проекта уникально:
[project_1: 23, project_2: 42, project_3: 82]
Для карты я пробовал что-то вроде:
map = function () {
emit(this.project_id, { count:1 });
}
и уменьшите:
reduce = function (key, values) {
var sum = 0;
values.forEach(function(doc){ sum += 1; });
return { count:sum };
}
Я запустил это для своей коллекции задач:
var mr = db.tasks.mapReduce(map, reduce, { out: "results" });
Но я получаю важные результаты при запросах:
db[mr.result].find();
Я использую Mongoid на Rails и полностью теряюсь из-за этого. Может ли кто-нибудь указать мне правильное направление?
Заранее спасибо. Феликс