因此,假设我在CouchDB中有以下两个文档:
{
"_id": "197000000002",
"_rev": "1-fbe819b01108f30d2e9e96f3fb46eff8",
"iyear": "1970",
"region_txt": "North America",
"country": "130",
"region": "1",
"country_txt": "Mexico",
"nkill": "1",
"nwound": "1",
}
{
"_id": "197000000003",
"_rev": "1-fbe819b01108f30d2e9e96f3fb46eff8",
"iyear": "1970",
"region_txt": "North America",
"country": "130",
"region": "2",
"country_txt": "Mexico",
"nkill": "3",
"nwound": "1"
}
我想要的是对所有nkill和nwound值求和,并具有以下内容:
[1970, "Mexico","North America"] 4, 2
此刻,我只能求和两个值之一或将两个值求和,但这不是我想要的。
我的地图函数现在看起来像这样返回结果:
function(doc) {
if(doc.nkill >= 1) {
emit([doc.iyear,doc.country_txt,doc.region_txt],parseInt(doc.nkill));
}
}
我将 _sum 用于reduce函数。
这会给我返回这样的键和值:
[1970, "Mexico", "North America"] 4
答案 0 :(得分:0)
使用自定义reduce
函数代替CouchDB内置的_sum
。
您可以通过数组或对象作为reduce
函数中的值,分别将两个值相加,然后输出新的数组/对象。
为使reduce
函数可以使用一个对象(例如),map
函数应更改为以下内容:
function(doc) {
if(doc.nkill >= 1) {
emit([doc.iyear,doc.country_txt,doc.region_txt],
{nkill: parseInt(doc.nkill), nwound: parseInt(doc.nwound));
}
}
查看CouchDB文档后,看来the strong preference是要从reduce
函数-或数组返回标量值。 This SO question涵盖了您的用例:如何从同一查询中分别求和两个不同的值。