ArangoDB 如何使用AQL通过排序索引来抵消限制?

bz4sfanl  于 2022-12-09  发布在  Go
关注(0)|答案(1)|浏览(146)

我有一个member的文档集合,它有两个相关的属性:_keyscore。我还在score字段上创建了一个persistent索引,因为这样可以显著加快排序速度。我想编写一个AQL查询,该查询根据特定成员(称为A)的排序索引返回不同的结果:

  • 一律至少传回score之前的前5个成员。(LIMIT 5
  • 如果A在前10名中,则返回排名第6 - 10的成员。(LIMIT 5, 5
  • 否则,返回排名直接高于和低于A的成员。(LIMIT x - 1, 3,x = A的排名)
nhhxz33t

nhhxz33t1#

我无法在单个查询中完成此操作,但是我可以通过执行以下操作来获取成员的排名

RETURN LENGTH(
  FOR m IN members
    FILTER m.score > DOCUMENT("members", "ID").score
    RETURN 1
) + 1

然后使用第二个查询获取所需的排序数据,类似于

FOR m IN members
    SORT m.score DESC LIMIT 10
    RETURN m

或者根据排序将具有LIMIT 5LIMIT rank - 2, 3的两个子查询连接起来。

相关问题