获取 CouchDB 中 mapped/reduced 条记录的总数
Getting total count of mapped/reduced records in CouchDB
couch 中的数据对每种联系人类型都有如下记录。
[{
"_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"
}]
Records 1,2,3 represent contact with the email userA@domain.com while
records 4 and 5 represent contact with an email userB@domain.com.
我的任务是构建查询以获取唯一联系人的总数(在本例中为 2 个),但我不确定如何实现。
目前,我有一个带有 _count reduce 的地图函数
function(doc){
emit(doc.emailAddress, 1);
}
哪个returns
{
"rows":
{
"key" : "userA@domain.com",
"value" : 3
},
{
"key" : "userA@domain.com",
"value" : 2
}
}
但是,我需要的是上面那些记录的总量,比如
{
"total" : 2
}
(注意:数据库很大,所以循环遍历 mapped/reduced 视图来计算记录不是一个选项)
将 reduce 函数设置为 _count,它应该会执行您想要的操作。
在您的情况下,您也可以使用 _sum。
您可以使用此 post
中描述的方法
1.- 按照您在问题中的描述定义一个视图(即命名为 "emails")
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
您应该得到不同的值计数作为结果。
couch 中的数据对每种联系人类型都有如下记录。
[{
"_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"
}]
Records 1,2,3 represent contact with the email userA@domain.com while records 4 and 5 represent contact with an email userB@domain.com.
我的任务是构建查询以获取唯一联系人的总数(在本例中为 2 个),但我不确定如何实现。
目前,我有一个带有 _count reduce 的地图函数
function(doc){
emit(doc.emailAddress, 1);
}
哪个returns
{
"rows":
{
"key" : "userA@domain.com",
"value" : 3
},
{
"key" : "userA@domain.com",
"value" : 2
}
}
但是,我需要的是上面那些记录的总量,比如
{
"total" : 2
}
(注意:数据库很大,所以循环遍历 mapped/reduced 视图来计算记录不是一个选项)
将 reduce 函数设置为 _count,它应该会执行您想要的操作。
在您的情况下,您也可以使用 _sum。
您可以使用此 post
中描述的方法1.- 按照您在问题中的描述定义一个视图(即命名为 "emails")
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
您应该得到不同的值计数作为结果。