Как сгруппировать документы по полю и перечислить неравные значения с помощью пользовательской функции уменьшения с представлением CouchDB - PullRequest
1 голос
/ 18 апреля 2019

У меня есть 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"}

Однако я хотел бы использовать пользовательскую функцию уменьшения с представлением CouchDB для группировки данных следующим образом:

{"SITE_1": ["dept_A", "dept_B", "dept_C"]}
{"SITE_2": ["dept_A"]}

Пользовательская функция уменьшения для представления CouchDB запускается так:

function (keys, values, rereduce) {

}

1 Ответ

0 голосов
/ 18 апреля 2019

Вы можете использовать уменьшить и Установить

let arr= [{"_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"}]

let final = arr.reduce((op, {siteId, departmentId}) => {
  op[siteId] = op[siteId] || new Set()
  op[siteId].add(departmentId)
  return op
},{})

console.log(...final['SITE_1'])
console.log(...final['SITE_2'])
...