View 如何使用CouchDB视图的自定义reduce函数按字段分组文档并列出不相等的值

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

我有1000份CouchDB中的员工文档,简化格式如下:

{
    "_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
用于此类情况