Couchdb 减少输出多个值的函数

Couchdb 减少输出多个值的函数,couchdb,Couchdb,我有一个多用户的沙发数据库,我想创建一个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和

我有一个多用户的沙发数据库,我想创建一个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
}

有办法吗?

您可以将地图功能定义为:

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 };
}
功能(键、值){
var xTime=0
var-yTime=0;
变量长度=value.length;
对于(变量i=0;i