所有运算符
分类 |
运算符 |
---|---|
Schema引用 | @ |
属性引用 | . |
逻辑运算符 | && ,` |
算术运算符 | + ,- ,* ,/ ,% |
比较运算符 | = ,!= ,> ,< ,>= ,<= ,<> ,<=> ,=~ ,in ,nin |
字符串运算符 | 字符串连接: + 包含: contains 包含(全文索引): contains |
列表运算符 | 构建列表: [] 访问元素: [] 判断包含关系: in ,nin |
去重 | DISTINCT |
Null谓词 | is null ,is not null |
优先级控制 | () |
Schema引用
@
可用来引用点或边的schema。
find().nodes() as n
return n.@ limit 10
find().edges({@links}) as e
return e
属性引用
.
可用来引用点或边的属性。
find().nodes() as n
return n._id limit 10
n({@account.level > 3}).e().n() as p
return p
逻辑运算符
与
将两个或多个条件结合在一起,当所有条件判断为真,整个表达式判断为真。
&
(与)运算符的真值表:
&& |
真 | 假 |
---|---|---|
真 | 真 | 假 |
假 | 假 | 假 |
本条查询返回age
大于30,且incomeGroup
为4的用户:
find().nodes({@User}) as n
where n.age > 30 && n.incomeGroup == 4
return n
或
将两个或多个条件结合在一起,只需满足其中一个条件,整个表达式判断为真。
||
(或)运算符的真值表:
|| |
真 | 假 |
---|---|---|
真 | 真 | 真 |
假 | 真 | 假 |
本条查询返回age
大于30,或incomeGroup
为4的用户:
find().nodes({@User}) as n
where n.age > 30 || n.incomeGroup == 4
return n
异或
将两个或多个条件结合在一起,每次对两个条件执行逻辑运算。若表达式只有两个条件,则有且仅有一个条件为真时,整个表达式判断为真。若两个条件均为真或均为假,则最终结果为假。若表达式涉及多个条件,xor
先判断前两个条件,并将判断结果与下一个条件进行比较,以此类推,直至对全部条件判断完毕。
xor
运算符的真值表:
xor |
真 | 假 |
---|---|---|
真 | 假 | 真 |
假 | 真 | 假 |
本条查询返回age
大于30,或incomeGroup
为4的用户,但会剔除同时满足两个条件的用户:
find().nodes({@User}) as n
where n.age > 30 xor n.incomeGroup == 4
return n
非
对条件进行否定,当条件为假时返回结果为真,反之亦然。
!
(非)运算符的真值表:
! |
真 | 假 |
---|---|---|
假 | 真 |
本条查询返回age
不等于30的用户:
find().nodes({@User}) as n
where !(n.age == 30)
return n
算术运算符
对数值进行算术运算。UQL支持以下算术运算符:
- 加:
+
- 减:
-
- 乘:
*
- 除:
/
- 取余:
%
return (2+8)%3
结果:
(2+8)%3 |
---|
1 |
比较运算符
比较两个值或表达式,返回真或假。UQL支持以下比较运算符:
本条查询返回age
不等于30的用户:
find().nodes({@User}) as n
where n.age != 30
return n
本条查询返回age
在25到35之间的用户,且25和35不包括在内:
find().nodes({@User.age <> [25, 35]}) as n
return n
本条查询返回age
在25到35之间的用户,需包含25和35:
find().nodes({@User.age <=> [25, 35]}) as n
return n
本条查询返回email
格式为xxx@xxx.com
或xxx@xxx.cn
的用户:
find().nodes({@User.email =~ "^[a-zA-Z0-9_.-]+@[a-zA-Z0-9]+\.(com|cn)$"}) as n
return n
字符串运算符
字符串连接
+
运算符按顺序合并每个字符串的字符,将多个字符串组合成单个字符串。
return "data" + "base"
结果:
"data" + "base" |
---|
database |
包含
contains
可用来判断一个字符串是否包含另一个子字符串。
return "Graph Database@d134" contains "graph"
结果:
"Graph Database@d134" contains "graph" |
---|
0 |
本条查询返回aboutMe
中包含graph database的用户:
find().nodes({@User.aboutMe contains "graph database"}) as n
return n
包含(全文索引)
contains
与全文索引共同使用时,可用来判断分词标记是否包含所有指定关键词。
使用全文索引prodDesc
查找分词同时包括graph和database的点:
find().nodes({~prodDesc contains "graph database"}) as n
return n
更多示例和详细解释,请参阅全文索引。
列表运算符
构建列表
在[]
内放置逗号分隔的元素可以创建列表。
with [1,2,3] as items
return items
结果:
items |
---|
[1,2,3] |
[]
也可用来构建嵌套列表:
with [[1,2],[2,3]] as items
return items
结果:
items |
---|
[[1,2],[2,3]] |
访问元素
使用[]
可通过索引来访问列表中的元素。列表索引从0开始,即第一个元素的索引为0
。
with ["a", 1, "b"] as items
return items[0]
结果:
items[0] |
---|
a |
判断包含关系
in
用来判断特定元素是否在列表中存在。反之,nin
用来判断特定元素是否在列表中不存在。
本条查询返回_id
值包含在列表["U01", "U02"]
中的点:
find().nodes({_id in ["U01", "U02"]}) as n
return n
本条查询返回_id
值不包含在列表["U01", "U02"]
中的点:
find().nodes({_id nin ["U01", "U02"]}) as n
return n
去重
distinct
可用来执行去重操作,确保仅保留唯一值。
本条查询返回用户的唯一age
值:
find().nodes({@User}) as n
return distinct n.age
Null谓词
用来指定对空值的测试。UQL支持以下null谓词:
is null
is not null
本条查询获取每个@Paper
点的title
值,如果值不为空,则返回该值;若值为空,则返回消息TITLE NOT FOUND
。
find().nodes({@Paper}) as n
return case
when n.title is not null then n.title
else "TITLE NOT FOUND"
end