我有一个包含多个用户的Couch数据库,我想创建一个reduce函数,为每个用户输出一个数字。
我们说这是我的数据库:
{
user: "A",
event: "x",
time: 100
}
{
user: "A",
event: "y",
time: 150
}
{
user: "B",
event: "x",
time: 300
}
{
user: "B",
event: "y",
time: 375
}
我想知道每个用户的事件x和y之间的时间。也就是说,我想输出类似
的输出{
user: "A",
xyTime: 50
}
{
user: "B",
xyTime: 75
}
有办法吗?
答案 0 :(得分:0)
您可以将地图功能定义为:
function(doc){
emit(doc.user, {event:doc.event, time: doc.xyTime});
}
在您的reduce中,您可以迭代所有值:
function(keys,values){
var xTime = 0
var yTime = 0;
var length = values.length;
for(var i = 0; i < length; i++){
var eventTime = parseInt(values[i].time, 10);
if(values[i].event === "x"){
xTime += eventTime;
} else {
yTime += eventTime;
}
}
var xyTime = Math.abs(xTime - yTime);
return { user: keys[0], xyTime: xyTime };
}