выделение всех полей подряд с помощью mapReduce - PullRequest
3 голосов
/ 28 июля 2011

Я использую мангуст с nodejs.Я использую mapReduce для извлечения данных, сгруппированных по полю. Итак, все, что мне дает коллекция, это ключ с полем группировки только из каждой строки базы данных.

Мне нужно получить все поля из базы данных.сгруппированы по полю и отсортированы на основе другого field.eg: у меня есть база данных, содержащая подробную информацию о местах и ​​стоимости проезда в эти места, а также несколько других полей. Теперь мне нужно получить данные таким образом, чтобы яполучить данные, сгруппированные по местам, отсортированным по тарифу для них.MapReduce помогает мне получить это, но я не могу получить другие поля.

Есть ли способ получить все поля, используя карту Reduce, вместо того, чтобы просто получить два поля, как упомянуто в приведенном выше примере ??1005 *

1 Ответ

0 голосов
/ 30 июля 2011

Должен признать, я не уверен, что полностью понимаю, о чем вы спрашиваете. Но, возможно, вам поможет одна из следующих мыслей:

либо ) когда вы перебираете результаты mapReduce, вы можете получить полные документы из mongodb для каждого результата. Это дало бы вам доступ ко всем полям в каждом документе по стоимости сетевого трафика.

или ) Значение, которое вы отправляете в emit (ключ, значение), может быть объектом. Таким образом, вы можете создать объект значения, который содержит все необходимые поля. Просто убедитесь, что вы используете точно такую ​​же структуру объекта для возвращаемого значения вашего метода Reduce.

Я пытаюсь проиллюстрировать (непроверенный) пример.

map = function() {
   emit(this.place, 
        {
           'field1': this.field1, 
           'field2': this.field2, 
           'count' : 1 
        });
}

reduce = function(key, values) {
   var result = { 
       'field1': values[0].field1, 
       'field2': values[0].field2, 
       'count' : 0 };

   for (v in values) {
       result.count += values[v].count;
   }

   return obj;
}
...