View 如何使用CouchDB视图的自定义reduce函数按字段分组文档并列出不相等的值
我有1000份CouchDB中的员工文档,简化格式如下:View 如何使用CouchDB视图的自定义reduce函数按字段分组文档并列出不相等的值,view,mapreduce,couchdb,reduce,View,Mapreduce,Couchdb,Reduce,我有1000份CouchDB中的员工文档,简化格式如下: { "_id": "1111", "departmentId": "dept_A", "siteId": "SITE_1" } { "_id": "2222", "departmentId": "dept_B", "siteId": "SITE_1" } { "_id": "3333", "departmentId": "dept_C", "siteId": "SIT
{
"_id": "1111",
"departmentId": "dept_A",
"siteId": "SITE_1"
}
{
"_id": "2222",
"departmentId": "dept_B",
"siteId": "SITE_1"
}
{
"_id": "3333",
"departmentId": "dept_C",
"siteId": "SITE_1"
}
{
"_id": "4444",
"departmentId": "dept_C",
"siteId": "SITE_1"
}
{
"_id": "5555",
"departmentId": "dept_A",
"siteId": "SITE_2"
}
{
"_id": "6666",
"departmentId": "dept_A",
"siteId": "SITE_2"
}
我有这样的看法:
function (doc) {
if (doc.departmentId && doc.siteId) {
emit(doc.siteId, doc.departmentId);
}
}
将按如下方式显示数据:
{"SITE_1": "dept_A"}
{"SITE_1": "dept_B"}
{"SITE_1": "dept_C"}
{"SITE_1": "dept_C"}
{"SITE_2": "dept_A"}
{"SITE_2": "dept_A"}
{"SITE_1": ["dept_A", "dept_B", "dept_C"]}
{"SITE_2": ["dept_A"]}
但是,我希望使用带有CouchDB视图的自定义reduce函数对数据进行分组,如下所示:
{"SITE_1": "dept_A"}
{"SITE_1": "dept_B"}
{"SITE_1": "dept_C"}
{"SITE_1": "dept_C"}
{"SITE_2": "dept_A"}
{"SITE_2": "dept_A"}
{"SITE_1": ["dept_A", "dept_B", "dept_C"]}
{"SITE_2": ["dept_A"]}
CouchDB视图的自定义reduce函数的启动方式如下:
function (keys, values, rereduce) {
}
您可以使用和
let arr=[{u id:“1111”,“部门id:“dept_A”,“siteId:“SITE_1”},{u id:“2222”,“department id:“dept_B”,“siteId:“SITE_1”},{u id:“dept_C”,“siteId:“SITE_1”},{u id:“4444”,“dept_C”,“siteId:“SITE_1”;{id:“SITE_id:“5555”,“department id”,“department_A”,“siteu id:“SITE”;“siteu id:“SITE”;“SITE”;“SITE”;“SITE”;{66:{id:”“部门A”、“站点ID”:“站点2”}]
让final=arr.reduce((op,{siteId,departmentId})=>{
op[siteId]=op[siteId]| |新集合()
op[siteId]。添加(部门ID)
返回操作
},{})
console.log(…final['SITE_1'])
log(…final['SITE_2'])
您可以使用
let arr=[{u id:“1111”,“部门id:“dept_A”,“siteId:“SITE_1”},{{u id:“2222”,“department id:“dept_B”,“siteId:“SITE_1”},{u id:“dept_C”,“siteId:“SITE_1”},{u id:“4444”,“dept_C”,“siteId:“SITE_id:”SITE_1“},{id:“5555”,“departmentId:“department_A”,“siteu id:”siteu 66; id:“SITE”:“SITE”{部门A,“站点ID”:“站点2}]
让final=arr.reduce((op,{siteId,departmentId})=>{
op[siteId]=op[siteId]| |新集合()
op[siteId]。添加(部门ID)
返回操作
},{})
console.log(…final['SITE_1'])
console.log(…final['SITE_2'])
siteId:1
未包含在您的输出中是输入错误还是您没有按任何规则添加?siteId:1
未包含在您的输出中是输入错误还是您没有按任何规则添加?输入错误这对CouchDB reduce来说太现代了。它与“let”不兼容除此之外,@xpqz此代码可以很容易地转换为for
循环和var
用于此类情况。对于CouchDB reduce来说,此js太现代了。它与“let”和其他东西不兼容。@xpqz此代码可以很容易地转换为for
循环和var
用于此类情况