我的数据如下
{
"key":"adasd",
"col1"::23,
"col2":3
}
我希望看到结果按照col1/sum(col2)
其中sum(col2)
是指sum
的所有值的col2
。我对cloudant有点新意,所以我不知道最好的办法是什么。我可以想到几个选择。
sum(col2)
创建一个新列,并使用col2
col1/sum(col2)
。然后我可以对这个专栏进行排序。我尝试创建一个视图,地图功能很简单
function (doc) {
emit(doc._id, {"col1_value":doc.col1,"col2_value":doc.col2});
}
但我对缩减模板感到困惑
function (keys, values, rereduce) {
if (rereduce) {
return sum(values);
} else {
return values.length;
}
}
我不知道如何访问两列的值然后在这里聚合。这甚至可能吗?有没有其他方法可以达到我需要的结果?
答案 0 :(得分:2)
两条评论:
按X/sum(Y)
订购与X
订购相同(如果-X
为否定,则按sum(Y)
排序)。因此,对于订购目的,只需按X
订购,为您节省一大堆麻烦。
假设您确实想知道X/sum(Y)
的值,而不只是知道它的顺序,那么在CouchDB中没有一步到位的方法可以实现这一点。我能想到的最好的方法是创建一个map / reduce视图,为您提供全局sum(Y)
。然后,您可以使用简单查询获取该总和,并在获取文档时在应用程序中进行数学运算。