面试题答案
一键面试在CouchDB中,通常使用MapReduce来编写查询逻辑。以下是实现该查询的Map函数:
function(doc) {
if (doc.company === "ABC Corp") {
doc.employees.forEach(function(employee) {
if (employee.department === "Sales") {
employee.projects.forEach(function(project) {
if (project.status === "in progress") {
emit(null, project.name);
}
});
}
});
}
}
这个Map函数首先检查文档中的company
是否为ABC Corp
,然后遍历employees
数组,找到department
为Sales
的员工,再遍历这些员工的projects
数组,对于status
为in progress
的项目,使用emit
函数输出项目名称。
对于Reduce函数,可以使用内置的_count
函数来统计找到的项目数量(如果需要的话)。在查询时,将Map函数和Reduce函数一起使用即可获取满足条件的项目名称。例如,在CouchDB的Futon界面中,可以在_design
文档里定义这个MapReduce视图,然后通过_view
端点进行查询。
注:实际应用中,可能需要根据具体的使用场景对MapReduce函数进行优化和调整,并且在生产环境中还需要考虑性能和数据量等因素。