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

aggregate data and still use changefeed in rethinkDB

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

这是我存储在名为 events

的 table 中的数据
[{
  "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 下,并且 changefeeds 也不适用于此查询:(

谁能给我指出正确的方向?

干杯,

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

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

不幸的是,从 1.6 开始不支持聚合的更改提要,但这在 2.2 或 2.3 中应该是可能的(所以在几个月内)。