聚合数据并仍在rethinkDB中使用changefeed

时间:2015-03-30 01:09:23

标签: rethinkdb

到目前为止,我很享受学习reQL,但我偶然发现了一个问题。

这是我存储在名为events

的表格中的数据
[{
  "date": "Tue Mar 17 2015 00:00:00 GMT+00:00" ,
  "id":  "00dacebd-b27e-49b5-be4b-42c2578db4bb" ,
  "event_name":  "View page" ,
  "total": 4 ,
  "unique": 4
},
{
  "date": "Mon Mar 16 2015 00:00:00 GMT+00:00" ,
  "id":  "09ac3579-960b-4a2b-95be-8e018d683494" ,
  "event_name":  "View page" ,
  "total": 68 ,
  "unique": 35
},
{
  "date": "Tue Mar 17 2015 00:00:00 GMT+00:00" ,
  "id":  "0bb01050-e93d-4845-94aa-b86b1198338d" ,
  "event_name":  "Click" ,
  "total": 17 ,
  "unique": 8
},
{
  "date": "Mon Mar 16 2015 00:00:00 GMT+00:00" ,
  "id":  "174dcf3e-7c77-47b6-a05d-b875c9f7e563" ,
  "event_name":  "Click" ,
  "total": 113 ,
  "unique": 35
}]

我希望最终结果看起来像这样

[{
  "date": "Mon Mar 16 2015 00:00:00 GMT+00:00",
  "Click": 113,
  "View Page": 68
},
{
  "date": "Tue Mar 17 2015 00:00:00 GMT+00:00",
  "Click": 17,
  "View Page": 4
}]

我得到的壁橱是这个查询:

r.table("events").orderBy({index: r.desc('date')}).group('date').map(function(event) {
  return r.object(event('repo_name'), event('unique'));
}).reduce(function(a, b) {
  return a.merge(b.keys().map(function(key) {
    return [key, a(key).default(0).add(b(key))];}).coerceTo('object'));
})

结果是:

[{
  "date": "Mon Mar 16 2015 00:00:00 GMT+00:00",
  "reduction": {
    "Click": 113,
    "View page": 68
  }
},
{
  "group": "Tue Mar 17 2015 00:00:00 GMT+00:00",
  "reduction": {
    "Click": 17,
    "View page": 4
  }
}]

但是,您可以看到事件嵌套在reduction下,并且更改源无法处理此查询:(

任何人都可以指出我正确的方向吗?

干杯,

1 个答案:

答案 0 :(得分:3)

您可以像这样更改group/reduction格式:

query.ungroup().map(function(row){
  return r.expr({date: row('group')}).merge(row('reduction'));
})

不幸的是,从1.6开始就不支持对聚合进行更改,但这应该可以在2.2或2.3中实现(所以在几个月内)。