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