Update your design document as follows:
{
"_id": "_design/power",
"_rev": "1-7788287ab51c480c725498eba4f79ddb",
"language": "javascript",
"views": {
"watt": {
"map": "function(doc) {\n emit(doc._id, doc.volt * doc.ampere);\n}"
"reduce": "_stats"
}
}
}
You can then query your view with ?group=true&group_level=2 to get statistics
for each month. The built-in reduce function _stats contains both sum and
count, so you can get to the average as well. You can also use the following
reduce function to calculate the average only:
avg_function = function(keys, values, rereduce) {
var avg, length;
if (!rereduce) {
length = values.length;
return [sum(values) / length, length];
} else {
length = sum(values.map(function(v) {
return v[1];
}));
avg = sum(values.map(function(v) {
return v[0] * (v[1] / length);
}));
return [avg, length];
}
};
(Sorry if the code could be more readable, it was produced by CoffeeScript, not
me)
The reduced view will contain a pair of numbers in an array, where the first
number is the average and the second number is the count. The other comment I
have is that you shouldn't have the date in your _id, but rather in a date
field, so you documents would be better off with:
{
"_id": "<some random id>",
"_rev": "1-...",
"date": [2011, 6, 7, 10, 55]
"volt": 107,
"ampere": 23.5
}
Gabor
On Thursday, June 9, 2011 at 6:06 PM, Fabio Di Bernardini wrote:
> Il 09/06/2011 17:18, Fabio Di Bernardini ha scritto:
> > If I have a map function emitting a timestamp as key ad a number as
> > document, how to get sum of values selecting a date range?
>
> More datails here:
> http://stackoverflow.com/questions/6294794/how-to-sum-values-of-a-view-in-a-date-range-using-couchdb