couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <>
Subject [Couchdb Wiki] Update of "Built-In_Reduce_Functions" by SebastianCohnen
Date Tue, 11 May 2010 09:30:39 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Couchdb Wiki" for change notification.

The "Built-In_Reduce_Functions" page has been changed by SebastianCohnen.
The comment on this change is: Initial version.


New page:
= Built-In Reduce Functions =

Currently (CouchDB 0.11.0) there are three built-in reduce functions. Built-in reduce functions
are performed right inside CouchDB implemented in Erlang. In most cases it is very fast because
they are way more efficient.

== Usage ==
To use built-in reduce functions, you simply need to replace your reduce function with {{{_count}}},
{{{_sum}}} or {{{_stats}}}.

Here is an example design document using build-in reduce functions:
  "language": "javascript",
    "all_customers": {
      "map": "function(doc) { if (doc.type == 'customer')  emit(, 1) }",
      "reduce" : "_count"
    "total_purchases_by_customer": {
      "map": "function(doc) { if (doc.type == 'purchase')  emit(doc.customer_id, doc.amount)
      "reduce": "_sum"

== Available Build-In Functions ==

=== _sum ===
{{{_sum}}} just sums up the emitted values. Therefore the mapped values need to be numbers.

The !JavaScript equivalent is:
function(keys, values, rereduce) {
  return sum(values);

=== _count ===
{{{_count}}} counts the emitted values. It's like {{{_sum}}} for {{{emit(foo, 1)}}}. The map
function may emit anything you want.

The !JavaScript equivalent is:
function(keys, values, rereduce) {
  if (rereduce) {
    return sum(values);
  else {
    return values.length;

=== _stats ===

{{{_stats}}} calculates various numerical statistics on your emitted data. {{{_stats}}} requires,
just like {{{_sum}}}, your emitted values to be numbers.

The reduce output looks like this:

{{{sum}}} and {{{count}}} is the equiverlent to {{{_sum}}} and {{{_count}}}. {{{min}}} and
{{{max}}} are the minimum and maximum values of the emitted values.

View raw message