开发者

how to return values between dates and group results in couchdb

I'm having issues grouping date range results in couch db. Say I have this data:

2010-11-14, Tom

2010-11-15, Tom

2010-11-15, Dick

2010-11-15, Tom

2010-11-开发者_开发问答20, Harry

and i want use a view (and possibly reduce function) to return grouped names between 2010-11-14 and 2010-11-16, eg

Tom 3

Dick 1

how can this be achieved?


I would suggest the following document structure, and map and reduce functions:

{ date : '2010-11-14', name : 'Tom' }

function(doc) { var r = {}; r[doc.name] = 1; emit (doc.date, r); }

function (keys, values, rereduce) {
  var r = {};
  for (var i in values) { 
    for (var k in values[i]) {
      if (k in r) r[k] += values[i][k];
      else r[k] = values[i][k];
    }
  }
  return r;
}

Then, you would query the view, asking for a full reduce (no grouping) with startkey and endkey parameters 2010-11-14 and 2010-11-16. You will get in return a single value:

{ 'Tom': 3, 'Dick': 1 }
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜