我有一个带有以下地图功能的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查询时会发生什么变化?
答案 0 :(得分:1)
通过curl调用视图时,可以尝试传入必要的参数以触发reduce和分组
e.g。
明确告诉CouchDB运行reduce
函数
$ curl -X GET http://somehost:5984/ops-db/_design/ops-views/_view/counts?reduce=true
或group
和group_level
参数
您可以阅读有关可用选项Here(Querying 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"
}
}
}