MST

星途 面试题库

面试题:CouchDB复杂嵌套数据的多条件查询

在CouchDB的文档中,有如下结构:{"_id":"doc1","company":"ABC Corp","employees":[{"name":"Alice","department":"Sales","projects":[{"name":"Project X","status":"completed"},{"name":"Project Y","status":"in progress"}]},{"name":"Bob","department":"Engineering","projects":[{"name":"Project Z","status":"pending"}]}]}。要求编写CouchDB的查询逻辑,找出公司为ABC Corp且员工所在部门为Sales,同时项目状态为in progress的项目名称。
38.8万 热度难度
数据库CouchDB

知识考点

AI 面试

面试题答案

一键面试

在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数组,找到departmentSales的员工,再遍历这些员工的projects数组,对于statusin progress的项目,使用emit函数输出项目名称。

对于Reduce函数,可以使用内置的_count函数来统计找到的项目数量(如果需要的话)。在查询时,将Map函数和Reduce函数一起使用即可获取满足条件的项目名称。例如,在CouchDB的Futon界面中,可以在_design文档里定义这个MapReduce视图,然后通过_view端点进行查询。

注:实际应用中,可能需要根据具体的使用场景对MapReduce函数进行优化和调整,并且在生产环境中还需要考虑性能和数据量等因素。