CouchDB的组= true是否会阻止rereduce?

时间:2012-11-12 05:28:40

标签: couchdb

CouchDB的map函数发出键/值对:

function(doc) {
  emit(doc.date, 1);
}

可能有许多键/值对具有相同的键。在查询视图时设置group=true将具有相同键的键/值对分组到同一个reduce中:

function(keys, values, rereduce) {
  return sum(values);
}

这是否意味着使用group=true(或任何group_level> 0),每个密钥只有一个减少

或者分组是否仅保证所有减少都具有同类密钥,并且仍然可以有一个或多个重新减少?

我正在使用一个不可交换的reduce函数,但每个键不会有大量的记录。我希望我能够设置group=true,然后在单个reduce中控制操作顺序。如果会有报复,那么该计划就没有意义了。

1 个答案:

答案 0 :(得分:1)

group=true大致意味着“嘿,Couch!将这张地图组合在一起,所有按键将是截然不同的,但不要错过它们的任何情况!”并且实际上等于group_level=999(见docs)。

虽然您可能猜不到正确的group_level并删除了一些关键项(如果键是一个有意义的数组),group将为您处理此问题,并且不会应用rereduce。

此外,您的reduce函数可以替换为内置的_sum - 它在Erlang中实现并且速度更快。