2016-09-19 3 views
0

Я пытаюсь применить карту уменьшить функцию в документе, как это:MongoDB MapReduce - Снижение BSONElement

{ 
"_id": 2, 
"timestamp_day": "1/20/2005 12:00:00 AM", 
"variableID": "GUID", 
"subscriptionID": "1", 
"unit": "kWh", 
"timezone": "UTC", 
"sum": 0, 
"numberOfRecords": 96, 
"values": { 
    "1": 0.06232154558520836, 
    "2": 0.06232154558520836, 
    "3": 0.06232154558520836, 
    "4": 0.06232154558520836, 
    "5": 0.06232154558520836, 
    "6": 0.06232154558520836, 
    "7": 0.06232154558520836, 
    "8": 0.06232154558520836, 
    "9": 0.06232154558520836, 
    ... 
    } 
} 

У меня есть документы на каждый день я держу информацию, и каждое значение представляет собой чтение. Моя цель - применить функцию mapReduce в этом документе, чтобы я мог получать такие показатели, как avg per day, avg per day per id и т. Д. Дело в том, что я не знаю, как это сделать, поскольку ключ значений содержит BSONElement.

До сих пор моя функция карты следующим образом:

var mapFunction = function() { 
    emit(this.subscriptionID, this.values); 
} 

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

Заранее благодарим.

ответ

0

Так что я получил несколько дней назад, и я оставлю его здесь, если кому-то это понадобится.

var mapFunction = function() { 
    for (var key in this.values) { 
    emit(this.subscriptionID, this.values[key]); 
    } 
} 

В данном конкретном случае эта функция будет отправлять функции уменьшения все значения, сопоставленные одному идентификатору подписки в качестве массива. Для значений в вопросе карта отправит примерно следующее:

[0.06232154558520836, 0.06232154558520836, 0.06232154558520836, ...] 

Надеюсь, что это поможет кому-то.