【AQL】SORT操作

SORT operation in AQL

SORT操作

SORT操作允许您指定一个或多个排序标准和方向来控制查询结果或数组元素的顺序。

语法

一般语法为


SORT expression direction

使用

SORT操作将已经产生的中间结果排序。例如,以下查询先按lastName(升序)排序,然后按firstName(升序)排序,最后按id(降序)排序:

FOR u IN users
  SORT u.lastName, u.firstName, u.id DESC
  RETURN u

指定方向是可选的。默认的排序方式是升序。要显式指定排序方向,关键字ASC(升序)和DESC(降序)可以使用。多个排序标准可以使用逗号分隔。在这种情况下,每个表达式的排序方向是单独指定的。

以下示例首先按lastName升序对文档进行排序,然后按firstName升序进行排序。

SORT doc.lastName, doc.firstName

以下示例首先按lastName降序对文档进行排序,然后按firstName升序进行排序。

SORT doc.lastName DESC, doc.firstName

以下示例首先按lastName升序对文档进行排序,然后按firstName降序进行排序。

SORT doc.lastName, doc.firstName DESC

当遍历一个集合时,除非使用SORT操作显式定义排序顺序,否则文档的顺序是不确定的。

如果排序的值不是唯一的,那么其对应的文档顺序是不确定的。如果应用有一个首选的属性来确定有相同值的文档的顺序,则使用该属性。如果没有这样的属性,可以使用_id系统属性来实现稳定的排序,因为它在每个文档中时唯一的。

FOR u IN users
  SORT u.firstName, u._id // break name ties with the document ID
  RETURN u

使用常量 SORT表达式可以指示没有特定的排序顺序。

SORT null

在优化过程中,AQL 优化器会优化常量 SORT 表达式,但如果优化器不需要考虑任何特定的排序顺序,则明确指定它们可能会实现进一步的优化。特别是在 COLLECT 语句之后,该语句应该产生一个排序结果。在 COLLECT 语句之后指定额外的 SORT null,允许 AQL 优化器完全删除收集结果的排序后处理。另请参阅COLLECT 选项方法

在执行一系列 SORT 操作时,最后一个总是被执行的,除非之前的 SORT 表达式更准确。如果在查询执行过程中优化规则 remove-redundant-sorts 和 remove-redundant-sorts-2 被禁用,那么最后一个 SORT 总是获胜的,尽管准确性较低。例如,考虑以下具有多个连续 SORT 操作的查询:

FOR friend IN friends
  SORT friend.friend.name, friend.id, friend.age 
  SORT friend.age, friend.id
  SORT friend.age
  RETURN friend

如果上述优化规则被停用,则最后一个SORT将生效,并且集合将按friend.age进行排序。如果优化规则处于活动状态,则第二个SORT将生效,因为它涵盖了相同的friend.age属性,并且在出现平局的情况下还会按另一个属性进行排序,使其更加准确。但是,如果第二个SORT表达式中的属性顺序相反,如SORT friend.id, friend.age,则最后一个SORT将生效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值