查找关系的深度
1、多个关系
关系可以多语句以()–()的形式来表达,或者它们相互连接在一起
查询’Kevin Pollak’演的电影和该电影的导演
MATCH(charlie{name:'Kevin Pollak'})-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)
return movie.title,director.name
2、可变长关系
可变长关系和节点的语法如下:
-[:TYPE*minHops..maxHops]->
minHops和maxHops都是可选的,默认值分别为1和无穷大。当没有边界值的时候,点也可以省略。当只设置了一个边界的时候,如果点省略了就意味着是一个固定长度的模式
查询
查询返回与’Kevin Pollak’关系为1跳到3跳的所有电影
MATCH(martin{name:'Kevin Pollak'})-[:ACTED_IN*1..3]-(movie:Movie)
return movie.title
3、变长关系的关系变量
当连接两个节点之间的长度是变长的,那么关系变量返回是将可能是一个关系列表
返回与’Kevin Pollak’关系为2跳的节点之间关系
MATCH(actor{name:'Kevin Pollak'})-[r:ACTED_IN*2]-(co_actor)
return r
4、零长路径
如果变长路径的下界值为零,则意味着两个变量指向同一个节点
查询电影’Hoffa’本身以及一级跳关系的演员和导演
MATCH(wallstreet:Movie{title:'Hoffa'})-[*0..1]-(x)
return x
5、命名路径
如果想返回或者需要对路径进行过滤,可以将路径赋值给一个变量
返回从开始’Kevin Pollak’的路径
MATCH p =(Hoffa { name: 'Kevin Pollak' })-->()
return p
6、匹配一簇关系
当模式包含一簇关系时,关系模式不会指定方向,Cypher将尝试匹配两个方向的关系
查询返回两个相连的节点,一个为开始节点,一个为结束节点
MATCH (a)-[r]-(b)
where id(r)=30
return a,b