【AQL】FILTER操作

FILTER operation in AQL

FILTER操作

FILTER操作将根据任意逻辑条件,限制返回的元素

语法

FILTER expression

表达式必须是一个条件,也就是说返回结果为false或true。

使用

如果条件结果为false,当前元素将被跳过,因此不会进一步处理,也不会成为结果的一部分。如果条件为true,当前元素不会被跳过,可以进一步处理。

可以在条件中使用的比较运算符、逻辑运算符等的列表,请参阅运算符

FOR u IN users
  FILTER u.active == true && u.age < 39
  RETURN u

可以在查询中使用多个FILTER语句,即使在同一个块中。如果使用多个FILTER语句,它们的结果将通过逻辑AND组合,这意味着所有过滤条件都必须为true,才能包含元素。

FOR u IN users
  FILTER u.active == true
  FILTER u.age < 39
  RETURN u

在上例中,users中的所有元素active属性值为true并且age属性值小于39才会被包含在结果中,其他元素将被跳过。

有关不存在或null属性的影响的描述,请参阅访问集合中的数据

虽然FILTER通常与FOR结合使用,但它也可以在顶层使用,也可以在没有FOR循环的子查询中使用。

FILTER false
RETURN ASSERT(false, "never reached")
解释:
当FILTER子句的条件始终为假时,实际上不会执行到RETURN语句。因此,上述示例中的查询将不会有任何结果返回,并且由于FILTER之后没有满足条件的数据行,"ASSERT(false, "never reached")"这一部分也不会被执行。

执行顺序

请注意,FILTER语句的位置可能会影响查询的结果。例如,测试数据中有16个活动用户:

FOR u IN users
  FILTER u.active == true
  RETURN u

我们最多可以将结果集限制为5个用户:

FOR u IN users
  FILTER u.active == true
  LIMIT 5
  RETURN u

这可能会返回Jim、Diego、Anthony、Michael和Chloe的用户文档。返回哪些是未定义的,因为没有SORT语句来确保特定的顺序。如果我们添加第二个FILTER语句,只返回女性…

FOR u IN users
  FILTER u.active == true
  LIMIT 5
  FILTER u.gender == "f"
  RETURN u

…它可能只是返回Chloe文档,因为LIMIT是在第二个FILTER之前应用的。到达第二个FILTER块的文档不超过5个,并且并非所有文档都符合性别标准,即使集合中有5个以上的活跃女性用户。可以通过添加SORT块来实现更具确定性的结果:

FOR u IN users
  FILTER u.active == true
  SORT u.age ASC
  LIMIT 5
  FILTER u.gender == "f"
  RETURN u

这将返回用户Mariah、Mary和Isabella。如果按DESC顺序按年龄排序,则返回Sophia和Emma文档。但是,LIMIT后面的FILTER并不常见,您可能想要这样的查询:

FOR u IN users
  FILTER u.active == true AND u.gender == "f"
  SORT u.age ASC
  LIMIT 5
  RETURN u

FILTER关键字放置的位置具有重要意义,它可以同时承担SQL中的WHERE和HAVING两个关键字的角色。因此,无论是在处理COLLECT聚合函数生成的中间结果还是直接操作文档属性等任何情况下,AQL的FILTER都能够正常工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值