对于具有以下结果的表(不一定是带有ID的记录):
[{time: 4, votes: 10}, {time: 6, votes: 3} ... ]
如何获得以下结果(或类似):
{average_time: 5, total_votes: 13}
通过只运行一个查询而不是两个?
答案 0 :(得分:1)
您可以使用reduce执行多个聚合。这应该工作
r.table('data').map(function(doc) {
return {
total_votes: doc("votes"),
total_time: doc("times"),
count: 1
}
}).reduce(function(left, right) {
return {
total_votes: left("total_votes").add(right("total_votes")),
total_time: left("total_time").add(right("total_time")),
count: left("count").add(right("count"))
}
}).map(function(result) {
return {
total_votes: result("total_votes"),
average_time: result("total_time").div(result("count"))
}
})
答案 1 :(得分:1)
试试这个:)
r.object(
'average_time',
r.table('data')('time').avg(),
'total_votes',
r.table('data')('votes').sum()
)