在couchdb视图中使用reduce和复合键在GET上不返回任何结果

时间:2014-08-17 23:26:14

标签: couchdb couchdb-futon

我有一个带有以下地图功能的couchdb视图:

function(doc) {
  if (doc.date_of_operation) {
    date_triple = doc.date_of_operation.split("/");
    d = new Date(date_triple[2], date_triple[1]-1, date_triple[0], 0, 0, 0, 0)
    emit([d, doc.name], 1);
  }
}

当我发出GET请求时,我会得到整个视图的数据(2.8MB):

$ curl -X GET http://somehost:5984/ops-db/_design/ops-views/_view/counts

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 2751k    0 2751k    0     0  67456      0 --:--:--  0:00:41 --:--:--  739k

但是,当我添加一个reduce函数时:

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

使用curl时,我不再获取任何数据:

$ curl -X GET http://somehost:5984/ops-db/_design/ops-views/_view/counts

% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    42    0    42    0     0   7069      0 --:--:-- --:--:-- --:--:--  8400

结果如下:

{"rows":[
{"key":null,"value":27065}
]}

这个观点&地图&使用Futon界面添加了reduce函数,当在那里选中Reduce复选框时,我确实为每个日期命名了一行,名称'具有为该对累积的值的对。通过GET查询时会发生什么变化?

2 个答案:

答案 0 :(得分:1)

通过curl调用视图时,可以尝试传入必要的参数以触发reduce和分组

e.g。

明确告诉CouchDB运行reduce函数

$ curl -X GET http://somehost:5984/ops-db/_design/ops-views/_view/counts?reduce=true

groupgroup_level参数

您可以阅读有关可用选项HereQuerying Options部分下)

的更多信息

答案 1 :(得分:0)

reduce应该是这样的

_sum

所以一个简单的“视图”看起来像这样:

{
   "_id": "_design/foo",
   "_rev": "2-6145338c3e47cf0f311367a29787757c",
   "language": "javascript",
   "views": {
       "test1": {
           "map": "function(doc) {\n  emit(null, 1);\n}",
           "reduce": "_sum"
       }
   }
}