概述
点模式和边模式统称为元素模式,是构建边模式的组成部分。
点模式
点模式用于匹配图中的点,以一对圆括号()
表示。点模式由三个可选的连续部分组成:
<node pattern> ::=
"(" [ <element variable declaration> ]
[ <label expression> ]
[ <element pattern predicate> ] ")"
<element pattern predicate> ::=
<element property specification> | <element pattern where clause>
最简单的空点模式可以匹配图中的任一点:
()
匹配标签为Person
的点并将其与变量n
绑定:
(n:Person)
匹配属性fullname
和age
有特定值的点:
({fullname: "John Doe", age: 30})
匹配标签为Person
,age
属性值大于30的点,并将其与变量n
绑定:
(n:Person WHERE age > 30)
边模式
边模式用于匹配图中的边,通常与两端的点模式共同使用,形成路径模式。如果边模式的两端没有点模式,则假定两边为隐式空点模式。
<edge pattern> ::= <full edge pattern> | <abbreviated edge pattern>
完整边模式
完整边模式由一对方括号[]
和边的方向表示。完整边模式包括:
-完整左向边:<-[]-
-完整右向边:-[]->
-完整无向边:-[]-
完整边模式由三个可选的连续部分组成:
<full edge pattern> ::=
<full edge pointing left> | <full edge pointing right> | <full edge any direction>
<full edge pointing left> ::=
"<-[" [ <element variable declaration> ] [ <label expression> ] [ <element pattern predicate> ] "]-"
<full edge pointing right> ::=
"-[" [ <element variable declaration> ] [ <label expression> ] [ <element pattern predicate> ] "]->"
<full edge any direction> ::=
"-[" [ <element variable declaration> ] [ <label expression> ] [ <element pattern predicate> ] "]-"
<element pattern predicate> ::=
<element property specification> | <element pattern where clause>
匹配图中所有边并将其与变量e
绑定:
()-[e]-()
匹配标签为WorkingIn
,属性role
有特定值的出边,并将其与变量e
绑定:
()-[e:WorkingIn {role: "Manager"}]->()
匹配score
属性值小于2的入边,并将其与变量e
绑定:
<-[e WHERE score < 2]-
上述单个边模式可自动扩展为以下路径模式:
()<-[e WHERE score < 2]-()
简写边模式
简写边模式仅包含边的方向,因此不支持变量声明或模式过滤。简写边模式包括:
-简写左向边:<-[]-
-简写右向边:-[]->
-简写无向边:-[]-
<abbreviated edge pattern> ::= "<-" | "->" | "-"
匹配标签为User
的点可以通过出边到达的点:
(:User)->(n)
匹配图中的所有1步路径:
p = -
上述单个边模式可自动扩展为以下路径模式:
p = ()-()
元素变量
点变量和边变量统称为元素变量。
点变量
点变量在点模式中声明,位于标签或属性过滤条件前,其变量值表示一组绑定的点。
变量n
与标签为Person
的点绑定:
MATCH (n:Person)
RETURN n.name
边变量
边变量在完整边模式中声明,位于标签或属性过滤条件前,其变量值表示一组绑定的边。
变量e
与标签为Follows
的边绑定:
MATCH ()-[e:Follows]->()
RETURN e
标签表达式
标签表达式是布尔谓词,以冒号:
或关键字IS
开头,在点模式或完整边模式中使用。标签表达式指定一个或多个标签,当与点或边的标签匹配时,返回true。
匹配标签为Movie
的点:
(m:Movie)
等同于:
(m IS Movie)
标签表达式可以使用以下运算符组合多个标签:
运算符 | 描述 | 优先级 |
---|---|---|
() |
分组 | 1(最高) |
! |
非(NOT) | 2 |
& |
与(AND) | 3 |
| |
或(OR) | 4 |
匹配标签为Movie
或Country
的点:
(n:Movie|Country)
匹配标签不是LIVING_IN
的边:
()-[e:!LIVING_IN]-()
匹配标签不是Movie
或Country
的点:
(n:!(Movie&Country))
在嬴图数据库中,每个点或边都有且仅有一个标签。因此,以下语句永远无法匹配到点:
(n:Movie&Country)
通配符%
可以用来匹配任何标签:
(n:%)
元素属性规范
属性键值对可以用一对花括号{}
包裹,在点模式或完整边模式中使用。可以根据属点或边的属性值,使用联合等式过滤点或边。
匹配属性type
和level
分别有特定值的点:
(n {type: "Gold", level: 5})
上述表达式等同于使用元素模式WHERE
从句:
(n WHERE type = "Gold" AND level = 5)