概述
路径模式用于匹配图中的路径,由三部分组成:
<path pattern> ::=
[ <path variable declaration> ]
[ <path pattern prefix> ]
<path pattern expression>
路径模式表达式
路径模式表达式(简称路径模式)定义构成路径的点和边。本质上,它是按照路径的拓扑规则串联起来的点和边模式序列,即必须以点开始,以点结束,节点与边交替出现。
基本路径
以下路径模式从Brainy点出发,通过出方向Joins边连接到Club点:

(:User {name: 'Brainy'})-[:Joins]->(:Club)
继续连接点模式和边模式,可创建更为复杂的路径模式。以下路径模式描述Brainy和mochaeach加入同一俱乐部,并将Club点与变量c绑定:

(:User {name: 'Brainy'})-[:Joins]->(c:Club)<-[:Joins]-(:User {name: 'mochaeach'})
以下路径模式通过重复利用变量a,构建起始点相同的环形结构:

(a:Account)-[:Owns]->(:Card)-[:Transfers]->(:Card)-[:Transfers]->(:Card)<-[:Owns]-(a)
高级路径
GQL支持以下高级路径:
路径变量声明
在路径模式的开头使用运算符=声明路径变量。路径变量绑定一组边。
路径变量p绑定由Follows出边连接任意两个点的路径:
MATCH p = ()-[:Follows]->()
RETURN p
路径模式前缀
路径模式前缀有两种:
示例图

CREATE GRAPH myGraph SHARDS [1]
INSERT (c1:default {_id: 'C1'}),
(c2:default {_id: 'C2'}),
(c3:default {_id: 'C3'}),
(c4:default {_id: 'C4'}),
(c1)-[:default]->(c2),
(c2)-[:default]->(c1),
(c2)-[:default]->(c3),
(c3)-[:default]->(c4)
路径约束
路径约束控制路径的遍历方式以及是否可以重复访问点或边。路径约束写在路径模式表达式或带括号路径模式的开头。
路径约束 |
描述 |
|---|---|
TRAIL |
默认项,路径可能有重复点,但没有重复边 |
ACYCLIC |
路径没有重复点 |
SIMPLE |
路径没有重复点,除非重复点为路径起点和终点,即形成一个环 |
WALK |
没有限制 |
暂不支持
ACYCLIC,SIMPLE和WALK。
使用不同的路径约束寻找从C1出发的1~3步出边路径:
MATCH p = WALK ({_id: 'C1'})->{1,3}()
RETURN p
MATCH p = ({_id: 'C1'})->{1,3}()
RETURN p
MATCH p = ACYCLIC ({_id: 'C1'})->{1,3}()
RETURN p
MATCH p = SIMPLE ({_id: 'C1'})->{1,3}()
RETURN p
结果:p

路径选择
路径选择前缀用于从匹配结果的每个分区选择部分路径。当匹配的路径包含多个起点和终点时,系统会根据不同的起、终点对将结果进行概念上的分区。路径选择在每个分区中分别进行,最终的结果是从所有分区选择的路径的并集。
| 路径选择 | 描述 |
|---|---|
ALL |
默认项,选择全部 |
ANY |
从每个分区选择任意一条路径 |
ANY k |
从每个分区选择任意k(非负整数)条路径;若一个分区的路径数量少于k,则保留全部路径 |
ALL SHORTEST |
详见最短路径 |
ANY SHORTEST |
|
SHORTEST k |
|
SHORTEST k GROUP |
寻找C1和目标点C3、C4间的1~3步路径,分别选择ALL(默认)和ANY:
MATCH p = ({_id: 'C1'})-{1,3}(target WHERE target._id IN ['C3', 'C4'])
RETURN p
MATCH p = ANY ({_id: 'C1'})-{1,3}(target WHERE target._id IN ['C3', 'C4'])
RETURN p
结果:p

组合使用
同时使用路径约束和路径选择时,路径选择写在路径约束前面。
(从每个分区)返回任意一条从C1出发的1~3步出边WALK路径:
MATCH p = ANY WALK ({_id: 'C1'})->{1,3}()
RETURN p

特殊说明
边模式并置
两个并置的边模式之间隐式存在一个空点模式。例如,
(:User)-[]->-[]->(u)
此路径项隐式扩展为:
(:User)-[]->()-[]->(u)
在路径项中,不可将右侧带有减号的标记(
]-,<-,-)与左侧带有减号的标记(-[,->,-)并置,因为这种组合会引入注释符号--。详情参考注释。
点模式并置
点模式并置仅支持带量词路径。