概述
在一些语句中使用过滤器,可以设置检索条件,根据指定的schema和属性值获取点和边数据。
在UQL中,过滤器包裹在花括号{}里。过滤器表达式通常包含比较运算符(如=、>、<)和逻辑运算符(如AND、OR)。每个过滤器表达式的结果为布尔值(TRUE或FALSE)或null,只有当结果为TRUE时返回对应的点或边数据。
一般过滤
本例使用过滤器{@user || @movie.rating > 3},获取所有@user点或属性rating大于3的@movie点:
find().nodes({@user || @movie.rating > 3}) as n
return n{*}
简化过滤
本例使用过滤器{age},获取age属性值不为30的点:
find().nodes({age - 30}) as n
return n{*}
下表展示如何判断不同类型数据是TRUE还是FALSE:
类型 |
TRUE | FALSE |
|---|---|---|
int32,uint32,int64,uint64,float,double |
非零 | 0 |
string,text |
不以字符0开始 |
以字符0开始 |
datetime |
除0000-00-00 00:00:00外的所有数据 |
0000-00-00 00:00:00 |
timestamp |
除1970-01-01 08:00:00 +08:00外的所有数据或与其等价的值 |
1970-01-01 08:00:00 +08:00或与其等价的值 |
point |
从不 | 任意值 |
list |
从不 | 任意值 |
步间过滤
在路径模板中,可使用系统别名prev_n或prev_e实现步间过滤。
查找点@card间的四步出向交易路径,满足交易时间递增的条件:
n({@card}).re({@transfers}).n({@card})
.re({@transfers.time > prev_e.time})[3]
.n({@card}) as p
return p{*}
例子中的time属性这样由prev_n或prev_e调用的属性,必须进行LTE操作以实现查询加速。