1

有没有办法获取过滤集的行号(排名)并将行号附加到结果中?

一个示例场景是我有一个包含以下记录的表:

[ 
  { points: 123, name: 'Glenn' },
  { points: 948, name: 'Bob' },
  { points: 22, name: 'Sarah' }
]

在上表中有数十万行,我希望能够根据点降序等条件对所有记录进行排名,然后返回行的子集(使用过滤器),其排名值包含在结果中像这样:

[ { points: 123, name: 'Glenn', rank: 2 }]
4

3 回答 3

2

您应该使用该offsetsOf功能

r.table('users') .orderBy({index: 'points'}) .offsetsOf(r.row('user_id').eq(yourUserId)) .run(conn, callback)

命令参考:http ://rethinkdb.com/api/javascript/offsets_of/

于 2015-11-11T20:18:26.640 回答
0
r.table('users').orderBy({index: 'points'}).run(conn, callback)

Tis 将返回按点排序的列表。(即:第一个元素的等级为 1,第二个元素的等级为 2,依此类推)

另见:https ://rethinkdb.com/api/javascript/order_by/

于 2015-10-25T13:16:28.260 回答
0

.map函数接受一个或多个序列/数组(参见文档)。因此,您可以将过滤后的序列用作第一个参数并r.range()用作第二个参数。因此,您的回调函数将有 2 个参数(每个参数代表一个序列/数组的一个元素)。见下文:

r.table('users')
    .orderBy({index: 'points'})
    .map(r.range(), (user, number) => {
        return user.merge(rank: number.add(1))
    }
于 2018-06-15T18:47:15.430 回答