来自http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views
CouchDB中的reduce函数定义如下:
function (key, values, rereduce) {
return sum(values);
}
- key将是一个元素为[key,id]形式的数组的数组
- values将是针对键中各元素发出的值的数组
- 即reduce([ [key1,id1], [key2,id2], [key3,id3] ], [value1,value2,value3], false)
我无法理解数组中的键何时/为什么会包含不同的键值。如果键的数组包含不同的键值,我该如何处理?
例如,假设我的数据库包含以下形式的帐户之间的移动。
{"amount":100, "CreditAccount":"account_number", "DebitAccount":"account_number"}
我希望有一个视图可以显示账户余额。
我的map函数做了以下事情:
emit( doc.CreditAccount, doc.amount )
emit( doc.DebitAccount, -doc.amount )
我的 reduce 函数做的是:
返回 values 的总和;
我似乎得到了预期的结果,但是我无法理解我的 reduce 函数会获得不同的 key 值的可能性。
我的 reduce 函数是否需要先将 key 值分组?在这种情况下我应该返回什么样的结果呢?
reduce()
函数。这是CouchDB的主要权衡之一。 - JasonSmith