我有一个快速增长的重新思考数据库,我需要创建一些聚合查询来减轻客户端的负载。这是一个示例文档列表:
[
{
created_ts: 1424389239198,
cost: 2,
id: '12345678'
},
{
created_ts: 1424389239198,
cost: 2,
id: '12345678'
},
{
created_ts: 1424389239198,
cost: 2,
id: '12345678'
}
]
我最终想要的是基于创建数据的小时的成本汇总(created_ts存储为纪元时间)。要从created_ts获取小时,我可以这样做:
r.epochTime(row('created_ts')).hours()
我需要一天中按小时分组的数据:
[
{
hour: 0,
total_cost: 6
},
{
hour: 1,
total_cost: 10
},
{
hour: 2,
total_cost: 24
}
]
那个数据在小时“0”(午夜)说我的总费用是6,凌晨1点,总费用是10,等等。我只是得到了它,所以它按小时分组,但我似乎无法把它变成像上面那样的“漂亮”对象。任何帮助深表感谢。 JavaScript中的示例非常受欢迎。谢谢!
答案 0 :(得分:3)
您可以像以下那样将分组数据作为答案:
r.table('test').group(function(row) {
return r.epochTime(row('created_ts')).hours();
}).sum('cost')
如果您想要指定的确切格式,可以这样做:
r.table('test').group(function(row) {
return r.epochTime(row('created_ts')).hours();
}).sum('cost').ungroup().map(function(gr) {
return {hour: gr('group'), cost: gr('reduction')}
})
答案 1 :(得分:1)
您可以在桌面上使用group
sum
费用,然后map
使用结果来获得所需的结构:
r.table('foo')
.group(r.epochTime(r.row('created_ts').div(1000)).hours())
.sum('cost')
.ungroup()
.map({hour: r.row('group'), total_cost: r.row('reduction')})