【问题标题】:Getting total count of mapped/reduced records in CouchDB获取 CouchDB 中映射/缩减记录的总数
【发布时间】:2018-07-15 16:34:41
【问题描述】:

沙发上的数据对每个联系人类型都有如下记录。

[{
  "_id":"1"
  "contact_type":"AA"
  "contact_email" : "userA@domain.com"
},{
  "_id":"2"
  "contact_type":"BB"
  "contact_email" : "userA@domain.com"
},{
  "_id":"3"
  "contact_type":"CC"
  "contact_email" : "userA@domain.com"
},{
  "_id":"4"
  "contact_type":"AA"
  "contact_email" : "userB@domain.com"
},
{
  "_id":"5"
  "contact_type":"BB"
  "contact_email" : "userB@domain.com"
}]

记录 1、2、3 表示与电子邮件 userA@domain.com 的联系,而 记录 4 和 5 表示与电子邮件 userB@domain.com 的联系。

我的任务是构建一个查询来获取唯一联系人的总数(在本例中为 2 个),但我不确定如何实现。

目前,我有一个带有 _count reduce 的 map 函数

function(doc){
  emit(doc.emailAddress, 1);
}

返回

{
  "rows":
    {
      "key" : "userA@domain.com",
      "value" : 3
    },
    {
      "key" : "userA@domain.com",
      "value" : 2
    }
}

但是,我需要的是上面这些记录的总量,即类似

{
  "total" : 2
}

注意:数据库很大,因此不能循环通过映射/缩减视图来计算记录数

【问题讨论】:

    标签: mapreduce couchdb couchdb-futon


    【解决方案1】:

    你可以使用post中描述的方法

    1.- 定义您在问题中描述的视图(即命名为“电子邮件”)

    2.- 定义一个列表函数(在我的示例中名为“count”)

    function(head,req){
     var count = 0;
     while(getRow()) count++;
     return JSON.stringify({total: count});
    }
    

    假设您的设计文档名为“users”,您可以使用带有此 URL 的列表函数来转换视图结果。

    http://.../db/_design/users/_list/count/emails?group=true
    

    您应该得到不同的值计数作为结果。

    【讨论】:

      【解决方案2】:

      将 reduce 函数设置为 _count,它应该会做你想做的事。

      在您的情况下,您也可以使用 _sum。

      【讨论】:

        猜你喜欢
        • 2012-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-10-13
        • 2014-05-21
        相关资源
        最近更新 更多