Я бы лично выполнил mapreduce для коллекции:
map - это простая функция, генерирующая поле "subida".Ключ должен быть таким же, если вам нужна единственная сумма;В результате после сокращения будет получен единственный объект {<key>: <sum>}
, где <key>
будет любым значением, которое вы указали в emit.
map = function() { emit(<key>, this.subida); }
уменьшение также простая функция суммирования их:
red = function(k, v) {
var i, sum = 0;
for (i in v) {
sum += v[i];
}
return sum;
}
Затем вы можете вызвать mapreduce для вашей коллекции <mycollection>
:
res = db.<mycollection>.mapReduce(map, red);
, которая создаст временную новую коллекцию, которой вы можете манипулировать, как и любой другой коллекции.Значение, возвращаемое mapReduce, содержит несколько значений, относящихся к mapReduce, таких как время, состояние ..., а также температура.имя коллекции, созданное в поле «результат».Чтобы получить нужные вам значения, вы должны запросить эту коллекцию:
db[res.result].find()
Что должно дать вам объект {<key>: <sum>}
.
Если вы запустите MongoDB 1.7.4 или выше, выВы можете избавить вас от хлопот, попросив MongoDB вернуть результат напрямую, не создавая коллекцию:
db.<mycollection>.mapReduce(map, red, {out : {inline: 1}});