当值是 reduce 函数中的对象时访问属性 (CouchDB)
Access attributes when values are objects in reduce function (CouchDB)
我正在尝试在 CouchDB 中编写一个查询,该查询将获取所有具有最大年龄的人的姓名和年龄,按性别和 isActive 状态分组。只有一个正在搜索的数据文档。作为了解当值是对象时如何编写 reduce 函数的中间步骤,我编写了一个查询,该查询仅 returns 每个组中的最大年龄,但这没有成功。以下 map 和 reduce 函数 return 适当的键,它们是 male/female 和 true/false 的 4 种组合,但在所有四组中值总是返回 0。
为什么这个视图没有return每个组的最大年龄?
地图函数:
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 函数可能会导致与性能相关的问题。如果可能的话,更喜欢效率更高的内置减速器。
此外,将 data
数组拆分成单独的文档可能会更好,以减少发生更新冲突的可能性。
我正在尝试在 CouchDB 中编写一个查询,该查询将获取所有具有最大年龄的人的姓名和年龄,按性别和 isActive 状态分组。只有一个正在搜索的数据文档。作为了解当值是对象时如何编写 reduce 函数的中间步骤,我编写了一个查询,该查询仅 returns 每个组中的最大年龄,但这没有成功。以下 map 和 reduce 函数 return 适当的键,它们是 male/female 和 true/false 的 4 种组合,但在所有四组中值总是返回 0。
为什么这个视图没有return每个组的最大年龄?
地图函数:
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 函数可能会导致与性能相关的问题。如果可能的话,更喜欢效率更高的内置减速器。
此外,将 data
数组拆分成单独的文档可能会更好,以减少发生更新冲突的可能性。