概述
在一些语句中使用过滤器,可以设置检索条件,根据指定的schema和属性值获取点和边数据。
在UQL中,过滤器包裹在花括号{}
里。过滤器表达式通常包含比较运算符,如=
、>
和<
,逻辑运算符,如AND
和OR
。每个过滤器表达式的结果为布尔值或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操作以实现查询加速。