javascript - 当值是reduce函数中的对象时访问属性(CouchDB)

标签 javascript couchdb

我正在尝试在 CouchDB 中编写一个查询,该查询将获取所有具有最大年龄的人的姓名和年龄,按性别和 isActive 状态分组。仅搜索一份数据文档。作为理解当值是对象时如何编写归约函数的中间步骤,我编写了一个查询,该查询仅返回每个组内的最大年龄,但这并不成功。以下map和reduce函数返回相应的键,即男性/女性和真/假的4种组合,但所有四组中的值始终返回0。

为什么此 View 不返回每个组的最大年龄?

map 功能:

function(doc){
    for (var i in doc.data){
        var person = doc.data[i];
        emit([person.gender, person.isActive], {'age':person.age, 'name': person.name});
    }
}

归约函数:

function(keys, values, rereduce){
    var maxAge = 0;
    for (var i = 0; i < values.length; i++){
        if(values[i].age > maxAge){
            maxAge = values[i].age;
        }
    }
    return maxAge;
}

最佳答案

您没有涵盖rereduce案例。你的reducer需要处理从map函数发出的值,而且还需要处理它自己返回的值:

function(keys, values, rereduce){
    if (rereduce) {
      return values.reduce(function(a, b) {
        return Math.max(a, b);
      });
    }
    var maxAge = 0;
    for (var i = 0; i < values.length; i++){
        if(values[i].age > maxAge){
            maxAge = values[i].age;
        }
    }
    return maxAge
}

一般来说,使用自定义的reduce函数可能会导致性能相关的问题。如果可能的话,最好选择效率更高的内置 reducer 。

此外,将 data 数组拆分为单独的文档可能会更好,以减少出现更新冲突的机会。

关于javascript - 当值是reduce函数中的对象时访问属性(CouchDB),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47545299/

相关文章:

javascript - 在 contentEditable ="true"DIV 中修改 innerHTML 导致失去焦点或错误选择

javascript - 两个 onmouseout 事件对各自的元素执行相同的操作

nosql - CouchDB 组级别和键范围

authentication - cochdb 权限角色始终为 "not authorized"

javascript - 需要在一个 onDateChange 上调用 2 个不同的函数

javascript - 响应图 : Get width and height of axis, 因此图可以占用容器的剩余大小

database - 当没有找到行时,为什么 CouchDB View 的 Total_rows 与 offset 不同?

couchdb - CouchDB 文档的 _id 字符串可以有多长?

javascript - Xpath 使用包含

CouchDB 在尝试更新 _security 时给出 no_majority