沙发中的数据具有每种联系类型的记录,如下所示。
[{
"_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
的地图功能function(doc){
emit(doc.emailAddress, 1);
}
返回
{
"rows":
{
"key" : "userA@domain.com",
"value" : 3
},
{
"key" : "userA@domain.com",
"value" : 2
}
}
但是,我需要的是上述记录的总量,即
{
"total" : 2
}
(注意:数据库很大,因此循环遍历映射/缩小视图以计算记录不是一个选项)
答案 0 :(得分:0)
将reduce函数设置为_count,它应该可以执行您想要的操作。
在您的情况下,您也可以使用_sum。
答案 1 :(得分:0)
Yo可以使用此post
中描述的方法1.-定义您在问题中描述的视图(即命名为“电子邮件”)
2.-定义一个列表函数(在我的例子中名为“count”)
function(head,req){
var count = 0;
while(getRow()) count++;
return JSON.stringify({total: count});
}
假设您的设计文档名为“users”,您可以使用带有此URL的list函数转换视图结果。
http://.../db/_design/users/_list/count/emails?group=true
你应该得到不同的值计数结果。