如何获取行的排名/行号?

时间:2015-10-25 13:10:53

标签: rethinkdb rethinkdb-javascript

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

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

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

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

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

3 个答案:

答案 0 :(得分: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/

答案 1 :(得分:0)

r.table('users').orderBy({index: 'points'}).run(conn, callback)

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

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

答案 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))
    }