我在文档中有一个序列
{
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]
不同答案 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数据库:)