Need Explanation of couchdb reduce function

Posted by Alan on Stack Overflow See other posts from Stack Overflow or by Alan
Published on 2010-05-03T18:03:13Z Indexed on 2010/05/03 18:08 UTC
Read the original article Hit count: 158

Filed under:

From http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

The couchdb reduce function is defined as

function (key, values, rereduce) {
    return sum(values);
}
  • key will be an array whose elements are arrays of the form [key,id]
  • values will be an array of the values emitted for the respective elements in keys
  • i.e. reduce([ [key1,id1], [key2,id2], [key3,id3] ], [value1,value2,value3], false)

I am having trouble understanding when/why the array of keys would contain different key values. If the array of keys does contain different key values, how would I deal with it?

As an example, assume that my database contains movements between accounts of the form.

{"amount":100, "CreditAccount":"account_number", "DebitAccount":"account_number"}

I want a view that gives the balance of an account.

My map function does:

emit( doc.CreditAccount, doc.amount )
emit( doc.DebitAccount, -doc.amount )

My reduce function does:

return sum(values);

I seem to get the expected results, however I can't reconcile this with the possibility that my reduce function gets different key values.

Is my reduce function supposed to group key values first? What kind of result would I return in that case?

© Stack Overflow or respective owner

Related posts about couchdb