couchdb-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
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.
http://wiki.apache.org/couchdb/Built-In_Reduce_Functions

--------------------------------------------------

New page:
= Built-In Reduce Functions =
<<TableOfContents()>>

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:
{{{
{
  "_id":"_design/company",
  "_rev":"12345",
  "language": "javascript",
  "views":
  {
    "all_customers": {
      "map": "function(doc) { if (doc.type == 'customer')  emit(doc.id, 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:
{{{
{"update_seq":6,"rows":[
{"key":null,"value":{"sum":2,"count":2,"min":1,"max":1,"sumsqr":2}}
]}

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

Mime
View raw message