MST
星途 面试题库

面试题:CouchDB Reduce函数在多层嵌套复杂数据聚合中的应用

现有CouchDB数据库,文档包含如下复杂结构:{"department": "A", "employees": [{"name": "Alice", "projects": [{"project_name": "P1", "tasks": [{"task_name": "T1", "hours": 5}, {"task_name": "T2", "hours": 3}]}, {"project_name": "P2", "tasks": [{"task_name": "T3", "hours": 4}]}]}, {"name": "Bob", "projects": [{"project_name": "P1", "tasks": [{"task_name": "T4", "hours": 6}]}]}]}。编写Map和Reduce函数,计算每个部门所有员工在所有项目任务上花费的总工时。
22.5万 热度难度
数据库CouchDB

知识考点

AI 面试

面试题答案

一键面试

Map函数

function(doc) {
    if (doc.department && doc.employees) {
        doc.employees.forEach(function(employee) {
            if (employee.projects) {
                employee.projects.forEach(function(project) {
                    if (project.tasks) {
                        project.tasks.forEach(function(task) {
                            emit(doc.department, task.hours);
                        });
                    }
                });
            }
        });
    }
}

Reduce函数

function(keys, values) {
    return sum(values);
}

这里sum是CouchDB内置的用于对数组中的数值进行求和的函数。通过Map函数,将每个任务的工时按照部门进行发射,Reduce函数则对每个部门对应的工时进行求和,从而得到每个部门所有员工在所有项目任务上花费的总工时。