面试题答案
一键面试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函数则对每个部门对应的工时进行求和,从而得到每个部门所有员工在所有项目任务上花费的总工时。