RethinkDB:​​如何只运行一个查询来执行多个聚合操作?

时间:2014-09-03 15:23:07

标签: rethinkdb

对于具有以下结果的表(不一定是带有ID的记录): [{time: 4, votes: 10}, {time: 6, votes: 3} ... ]

如何获得以下结果(或类似): {average_time: 5, total_votes: 13} 通过只运行一个查询而不是两个?

2 个答案:

答案 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()
)