агрегировать данные и по-прежнему использовать канал изменений в 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, и каналы изменений также не будут работать в этом запросе :(

Кто-нибудь может указать мне в правильном направлении?

Ваше здоровье,


person Syl    schedule 30.03.2015    source источник


Ответы (1)


Вы можете изменить формат group/reduction следующим образом:

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

К сожалению, фиды изменений в агрегациях не поддерживаются с версии 1.6, но это должно быть возможно в версиях 2.2 или 2.3 (то есть через несколько месяцев).

person mlucy    schedule 30.03.2015