MST

星途 面试题库

面试题:CouchDB中Reduce函数对Map结果常见聚合方式及示例

请简述CouchDB中Reduce函数对Map结果进行求和、求平均值聚合的实现思路,并分别给出简单的Map和Reduce函数示例代码。
17.5万 热度难度
数据库CouchDB

知识考点

AI 面试

面试题答案

一键面试

求和实现思路

  1. Map阶段:在Map函数中,对文档进行遍历,提取需要进行求和操作的字段值,并以键值对形式输出,键可以是任意唯一标识(如文档ID),值为需要求和的字段值。
  2. Reduce阶段:Reduce函数接收Map函数输出的键值对集合,对每个键对应的值进行累加操作,最终得到总和。

求平均值实现思路

  1. Map阶段:与求和类似,在Map函数中提取需要求平均值的字段值,以键值对形式输出,同时可以额外输出一个计数1,用于统计参与计算的文档数量。
  2. Reduce阶段:Reduce函数先对每个键对应的值(需要求平均值的字段值)进行累加,同时统计每个键对应的计数总和,最后将累加值除以计数总和得到平均值。

求和示例代码

// Map函数
function (doc) {
    if (doc.value) {
        emit(doc._id, doc.value);
    }
}

// Reduce函数
function (keys, values, rereduce) {
    return values.reduce(function (sum, value) {
        return sum + value;
    }, 0);
}

求平均值示例代码

// Map函数
function (doc) {
    if (doc.value) {
        emit(doc._id, [doc.value, 1]);
    }
}

// Reduce函数
function (keys, values, rereduce) {
    var total = 0;
    var count = 0;
    values.forEach(function (value) {
        total += value[0];
        count += value[1];
    });
    return total / count;
}