汇总嵌套字段

时间:2016-01-26 09:35:04

标签: rethinkdb

我很难获得正确的查询。

我有一个遵循这种风格的架构:

{
  "User":  "user1" ,
  "active": true ,
  "points": {
  "2015-07": 2 ,
  "2015-08": 5 ,
  "2015-09": 7 ,
  "2015-10": 1 ,
  "2015-11": 28 ,
  "2015-12": 5 ,
  "2016-01": 3
  }
} 

{
  "User":  "user2" ,
  "active": true ,
  "points": {
  "2015-01": 8 ,
  "2015-02": 4 ,
  "2015-09": 6 ,
  "2015-10": 12 ,
  "2015-11": 34 ,
  "2015-12": 1 ,
  "2016-01": 2
  }
} 

如何编写将返回每个用户的查询以及总点数?

3 个答案:

答案 0 :(得分:2)

在@ Tryneus'中只是一个小错字。例如,.sum(...)应该在最后。试试这个:

r.db('test').table('test').map(function (x) {  
  return x.merge( {points: x('points').values().sum()}) 
})

答案 1 :(得分:1)

对于我们这些不幸仍然没有使用values函数的RethinkDB版本的人来说,诀窍是首先检索所有键并使用map来检索一系列值:

r.db("test").table("test").map(function (x) {  
  return x.merge({
    points: x("points").keys().map(function(key) {
      return x("points")(key)
    }).sum()
  }) 
})

答案 2 :(得分:0)

使用map执行此操作应该很简单,将每行中“points”对象的值相加。此代码使用Javascript,因此它应该在数据资源管理器中工作,其中r.expr(data)是您要操作的值序列。

r.expr(data).map(function (x) {
    return x.merge({points:r.sum(x('points').values())});
})