有没有办法获取过滤集的行号(排名)并将行号附加到结果中?
示例场景是我有一个包含以下记录的表:
[
{ points: 123, name: 'Glenn' },
{ points: 948, name: 'Bob' },
{ points: 22, name: 'Sarah' }
]
在上表中有成千上万的行,我希望能够根据像点下降的条件对所有记录进行排名,然后返回包含其排名值的行的子集(使用过滤器)在这样的结果:
[ { points: 123, name: 'Glenn', rank: 2 }]
答案 0 :(得分:2)
您应该使用offsetsOf
功能
r.table('users')
.orderBy({index: 'points'})
.offsetsOf(r.row('user_id').eq(yourUserId))
.run(conn, callback)
答案 1 :(得分:0)
r.table('users').orderBy({index: 'points'}).run(conn, callback)
Tis将返回按点排序的列表。 (即:第一个元素将具有等级1,第二个元素等级为2等)
答案 2 :(得分:0)
.map
函数接受一个或多个序列/数组(See Docs)。因此,您可以将过滤后的序列用作第一个参数,并使用r.range()
作为第二个参数。所以你的回调函数将有2个参数(每个参数代表一个序列/数组的元素)。见下文:
r.table('users')
.orderBy({index: 'points'})
.map(r.range(), (user, number) => {
return user.merge(rank: number.add(1))
}