如何获得一行的排名/行号?

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,依此类推)

另请参阅:https://rethinkdb.com/api/javascript/order_by/

你应该使用offsetsOf函数

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

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

.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))
    }