【问题标题】:Sum values in CouchDB documentsCouchDB 文档中的总和值
【发布时间】:2019-04-26 11:34:52
【问题描述】:

所以假设我在 CouchDB 中有以下两个文档:

{
   "_id": "197000000002",
   "_rev": "1-fbe819b01108f30d2e9e96f3fb46eff8",
   "country": "130",
   "region": "1",
   "country_txt": "Mexico",
   "nkill": "1",
}

{
       "_id": "197000000003",
       "_rev": "1-fbe819b01108f30d2e9e96f3fb46eff8",
       "country": "130",
       "region": "2",
       "country_txt": "Mexico",
       "nkill": "3",
    }

我想创建一个视图,返回如下内容:

键:墨西哥,值:4

这必须发生在所有其他国家/地区,因此 nkill 中的所有值都需要根据国家/地区相加。

我尝试了以下地图功能:

function(doc) {
 if(doc.nkill >= 1){
  emit(doc.country_txt,doc.nkill);
}
}

还有下面的Reduce函数:

function(keys,values,rereduce) {
  return sum(values);
}

但到目前为止,我无法获得我想要的结果,我做错了什么以及如何获得我想要的结果?

【问题讨论】:

    标签: javascript mapreduce couchdb couchdb-futon


    【解决方案1】:

    您的属性nkill 存储了一个字符串。

    我假设 sum() 函数要么连接字符串,要么做其他事情来求和数字。

    您可以尝试将您的值与 map 函数中的数字一致,它应该可以工作。

    另外,如果你想求和,你应该使用 _sum 内部 reduce 函数。它在 Erlang 内部运行时速度更快。

    【讨论】:

    • 谢谢!真的没想到,通过在map函数中加入parseInt(doc.nkill)解决了。如果您不介意_sum,再问一个问题。我需要如何使用它,像这样?函数(键,值){ 返回总和(值); } _sum
    • 在您的设计文档中,只需设置"reduce":"_sum"。请参阅此处的文档:docs.couchdb.org/en/stable/ddocs/ddocs.html#_sum
    猜你喜欢
    • 1970-01-01
    • 2014-01-14
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多