function map() { emit(1, { sum: this.value, // the field you want stats for min: this.value, max: this.value, count: 1, diff: 0 }); } function reduce(key, values) { return values.reduce(function reduce(previous, current, index, array) { var delta = previous.sum/previous.count - current.sum/current.count; var weight = (previous.count * current.count)/(previous.count + current.count); return { sum: previous.sum + current.sum, min: Math.min(previous.min, current.min), max: Math.max(previous.max, current.max), count: previous.count + current.count, diff: previous.diff + current.diff + delta*delta*weight }; }) } function finalize(key, value) { value.average = value.sum / value.count; value.population_variance = value.diff / value.count; value.population_standard_deviation = Math.sqrt(value.population_variance); value.sample_variance = value.diff / (value.count - 1); value.sample_standard_deviation = Math.sqrt(value.sample_variance); delete value.diff; return value; }