1

我有一个带有以下地图功能的 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 界面添加了此视图、地图和缩减功能,当在那里选中缩减复选框时,我确实为每个“日期、名称”对获得一行,其中包含为该对累积的值。通过 GET 查询时会发生什么变化?

4

2 回答 2

1

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

例如

明确告诉 CouchDB 运行该reduce函数

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

或者groupgroup_level参数

您可以在此处阅读有关可用选项的更多信息(在Querying Options部分下)

于 2014-08-19T14:50:47.960 回答
0

减少应该是这样的

_sum

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

{
   "_id": "_design/foo",
   "_rev": "2-6145338c3e47cf0f311367a29787757c",
   "language": "javascript",
   "views": {
       "test1": {
           "map": "function(doc) {\n  emit(null, 1);\n}",
           "reduce": "_sum"
       }
   }
}
于 2014-08-19T08:59:16.773 回答