需要说明couchdb减少功能

时间:2010-05-03 18:03:13

标签: couchdb couchdb-futon

来自http://wiki.apache.org/couchdb/Introduction_to_CouchDB_views

couchdb reduce函数定义为

function (key, values, rereduce) {
    return sum(values);
}
  • 键将是一个元素的数组 是[key,id]
  • 形式的数组
  • 值将是值的数组 为各个元素发射 在钥匙
  • 即。 reduce([[key1,id1],[key2,id2],[key3,id3]],[value1,value2,value3],false)

我无法理解何时/为什么键数组将包含不同的键值。如果键数组确实包含不同的键值,我将如何处理它?<​​/ p>

例如,假设我的数据库包含表单帐户之间的移动。

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

我想要一个可以提供帐户余额的视图。

我的地图功能确实:

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

我的reduce功能确实:

  

返回总和(值);

我似乎得到了预期的结果,但是我无法将此与我的reduce函数获得不同键值的可能性相协调。

我的reduce函数是否应该首先对键值进行分组?在这种情况下,我会返回什么样的结果?

1 个答案:

答案 0 :(得分:3)

默认情况下,Futon会对您的搜索结果进行“分组”,这意味着您的每个密钥都会获得新的减少量 - 在您的情况下,即帐户。组功能正是针对这种情况。

在原始HTTP API上,您将获得所有帐户的总减少量,这可能没用。所以请记住在您自己的应用程序中使用group = true以确保您获得每个帐户的摘要。