嗯..这是我的想法:
-
您可以使用 POST 设置两个 Key。
功能(文档){
变量总计={};
总计={年份:doc.year,litres:doc.litres};
发射(doc.user,{用户:总计,年:[总计]});
发射(“”,{用户:“”,年:[总计]});
}
查询:
curl -X POST
http://localhost:5984/test_a/_design/test/_view/test -H "Content-type:application/json" -d '{"keys":["A",""]}'
结果(缩短):
"key":"A","value":{"user":{"year":"2016","litres":19900},"years": [{"year":"2016","litres" :19900}]}},
"key":"A","value":{"user":{"year":"2015","litres":12030},"years":[{"year":"2015","litres" :12030}]}},
"key":"","value":{"user":"","years":[{"year":"2016","litres":19900}]}},
"key":"","value":{"user":"","years":[{"year":"2016","litres":16000}]}},
"key":"","value":{"user":"","years":[{"year":"2016","litres":15000}]}},
"key":"","value":{"user":"","years":[{"year":"2015","litres":12030}]}},
"key":"","value":{"user":"","years":[{"year":"2015","litres":20002}]}},
"key":"","value":{"user":"","years":[{"year":"2015","litres":22000}]}}
如果你然后做一个从两个键收集数据的减少:
function(keys, values, rereduce) {
var user_sum=0;
var total_a=[];
var v_values={};
var curUser="";
for (var i=0;i<keys.length;i++) {
if (keys[i]!="") {
curUser=keys[i][0];
}
values[i].years.forEach(function(year) {
if (v_values["year_"+year.year]) {
v_values["year_"+year.year]=
{year:year.year,
litres:v_values["year_"+year.year].litres+year.litres
};
}else{
v_values["year_"+year.year]={year:year.year,litres:year.litres};
}
});
}
return ({user:curUser,years:v_values})
}
你得到了
{"rows":[
{"key":"A","value":
{"user":"A",
"years":{
"year_2015": {"year":"2015","litres":12030},
"year_2016":{"year":"2016","litres":19900}
}
}
},
{"key":"","value":
{"user":"",
"years":{
"year_2015":{"year":"2015","litres":54032},
"year_2016":{"year":"2016","litres":50900}
}
}
}
]
}
我有点懒..所以你自己检查reduce / rereduce...