Rethinkdb组序列由N个元素组成

时间:2015-08-06 09:08:24

标签: rethinkdb

我在文档中有一个序列

{ errorTicker: [1,2,3,4,5,6,7,8,9] }

我想通过N个元素进行分组并获取

表示N = 3 { errorTicker: [[1,2,3],[4,5,6],[7,8,9]] }

什么是理想的解决方案:

r.expr([1,2,3,4,5,6,7,8,9]).group(function(entry, index){
    return r.expr(index).div(3).coerceTo('string').split('.')(0);
})

但是group不接受当前索引,只接受正在处理的条目......

我可以在这里使用什么魔法来达到预期的效果?

P.S。序列的顺序对我很重要,即组[1,2,3]与[1,3,5]

不同

1 个答案:

答案 0 :(得分:1)

由于.range()命令

,我几乎在正确的轨道上

这是我现在正在使用的中间版本

r.expr({tickers: [9,6,3,9,6,7,8,1,2]})
  .do(function (e){
    return r.range(e('tickers').count())
      .map(function(index){
        return [index, e('tickers')(index)]
      })
      .group(function(indexValue){
        return r.expr(indexValue(0)).div(3).coerceTo('string').split('.')(0);
      })
    })

似乎做我需要的最终版本:

r.expr({tickers: [9,6,3,9,6,7,8,1,2]})
  .do(function (e){
    return r.range(e('tickers').count())
      .map(function(index){
        return [index, e('tickers')(index)]
      })
      .group(function(indexValue){
        return r.expr(indexValue(0)).div(3).coerceTo('string').split('.')(0);
      })
      .ungroup()
      .map(function(e){
        return e('reduction').map(function(e){
          return e(1)
        })
      })      
    })

感谢任何改进;)

更新:为了获得更高的效率,我们可以替换 r.expr(indexValue(0)).div(3).coerceTo('string').split('.')(0)

r.expr(index).sub(r.expr(index).mod(3)).div(3);

P.S。 rethinkdb完全是岩石!它是我曾经使用过的最强大,最直观的NoSQL数据库:)