沙发底图减少查询
Couch base map reduce query
我有 3 Json 个文档
文档 1
"No" : 1
"City" : "Patiala"
"Value" : 10
文件 2
"No" : 1
"City" : "Delhi"
"Value" : 11
文档 3
"No" : 1
"City" : "Patiala"
"Value" : 11
我想要像
这样的输出
1 <Delhi or Patiala any one city> 32
我尝试使用组级别 2 进行查询
map
function(doc, meta)
{
emit(doc.No,[doc.Value,doc.City]);
}
减少
function(key,values,rereduce){
if(!rereduce){
var sum=0;
var s=[];
var v=[];
v=values[1];
s=values[0];
for(i=0;i<s.length;++i){
sum+= s[i];
}
return (sum,v[0]);
}else{
var sum=0;
var s=[];
var v;
v=values[1];
s=values[0];
for(i=0;i<s.length;++i){
sum+= s[i];
}
return (sum,v);
}
}
并得到以下错误
(Reducer: Error building index for view `my_first_view`, reason: TypeError: Cannot read property 'length' of null)
我只想在 'No' 字段上进行分组,但要显示任何城市。
CouchDB 文档通常会警告不要通过执行此类操作来滥用 reduce 函数,因此可能值得使用您在生产中期望的大小的数据集进行测试。
您可能最好使用一个简单的视图,其中包含您拥有的 map 函数和 doc.Value
上的 reduce 函数 sum。调用两次,一次使用查询参数 ?reduce=false&key=1&limit=1
,再次使用 ?group=true&key=1
.
说了这么多,这可能会降低你的性能,这将在一个查询中完成你想要的。
地图函数:
function (doc) {
emit(doc.No,[doc.City, doc.Value]);
}
归约函数:
function (keys, values, rereduce) {
var city;
var sum = 0;
for (var i = 0; i<values.length; i++){
if (!city){
city = values[i][0];
}
sum = sum + values[i][1];
}
return [city, sum];
}
查询URL:
http://host:5984/db/_design/views/_view/view?group=true&key=1
给出结果:
{"rows":[
{"key":1,"value":["Patiala",32]}
]}
我有 3 Json 个文档
文档 1
"No" : 1
"City" : "Patiala"
"Value" : 10
文件 2
"No" : 1
"City" : "Delhi"
"Value" : 11
文档 3
"No" : 1
"City" : "Patiala"
"Value" : 11
我想要像
这样的输出 1 <Delhi or Patiala any one city> 32
我尝试使用组级别 2 进行查询
map
function(doc, meta)
{
emit(doc.No,[doc.Value,doc.City]);
}
减少
function(key,values,rereduce){
if(!rereduce){
var sum=0;
var s=[];
var v=[];
v=values[1];
s=values[0];
for(i=0;i<s.length;++i){
sum+= s[i];
}
return (sum,v[0]);
}else{
var sum=0;
var s=[];
var v;
v=values[1];
s=values[0];
for(i=0;i<s.length;++i){
sum+= s[i];
}
return (sum,v);
}
}
并得到以下错误
(Reducer: Error building index for view `my_first_view`, reason: TypeError: Cannot read property 'length' of null)
我只想在 'No' 字段上进行分组,但要显示任何城市。
CouchDB 文档通常会警告不要通过执行此类操作来滥用 reduce 函数,因此可能值得使用您在生产中期望的大小的数据集进行测试。
您可能最好使用一个简单的视图,其中包含您拥有的 map 函数和 doc.Value
上的 reduce 函数 sum。调用两次,一次使用查询参数 ?reduce=false&key=1&limit=1
,再次使用 ?group=true&key=1
.
说了这么多,这可能会降低你的性能,这将在一个查询中完成你想要的。
地图函数:
function (doc) {
emit(doc.No,[doc.City, doc.Value]);
}
归约函数:
function (keys, values, rereduce) {
var city;
var sum = 0;
for (var i = 0; i<values.length; i++){
if (!city){
city = values[i][0];
}
sum = sum + values[i][1];
}
return [city, sum];
}
查询URL:
http://host:5984/db/_design/views/_view/view?group=true&key=1
给出结果:
{"rows":[
{"key":1,"value":["Patiala",32]}
]}