match

//清空数据
match (n) detach delete n

(一)查询节点
1.查询所有节点
//查询数据库中的所有节点
match(n)return n

2.查询带有某个标签的所有节点
//查询数据库中的所有电影
match(movie:Movie)return movie.title

3.查询关联节点 --
//查询Oliver Stone导演的所有电影
match(director{name:"Oliver Stone"})--(movie)return movie.title

4.匹配标签
//查询Oliver Stone相连的带有movie标签的所有节点
match(Oliver:Person{name:"Oliver Stone"})--(movie:Movie)return movie.title

(二)查询关系
1. 通过-->或者<--
//查询Oliver Stone外向连接的所有节点
match(Oliver:Person{name:"Oliver Stone"})-->(movie:Movie)return movie.title

2.有向关系和变量
//查询Oliver外向关系的类型
match(Oliver:Person{name:"Oliver Stone"})-[r]->(:Movie)return type(r)

3.匹配关系类型
//返回Wall Street中的所有演员
match(p)-[:ACTED_IN]->(movie:Movie{title:"Wall Street"})return p.name

4.匹配多种关系类型
//返回Wall Street中关系为ACTED_IN|或者DIRECTED的所有节点
match(p)-[:ACTED_IN|:DIRECTED]->(movie:Movie{title:"Wall Street"})return p.name

5. 匹配关系类型和使用关系变量
//返回Wall Street所有演员的角色
match(p)-[r:ACTED_IN]->(movie:Movie{title:"Wall Street"})return r.roles

(三)关系的深度
1. 带有特殊字符的关系类型
create(Rob)-[:`TYPE WITH SPACE`]->(Charlie)
match(Rob:Person {name:'Rob Reiner'})-[r:`TYPE WITH SPACE`]->()return type(r)

2.多个关系 ()-()
//查询Charlie演的电影和该电影的导演
match(Charlie:Person {name:'Charlie Sheen'})-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)return movie.title,director.name

3.可变长关系
//查询Charlie关系为1-3的所有电影
match(Charlie:Person {name:'Charlie Sheen'})-[:ACTED_IN*1..3]->(movie)return movie.title
4. 变长关系的关系变量

//当两个节点之间的长度是变长,返回一个关系列表
match(actor{name:"Charlie Sheen"})-[r:ACTED_IN*2]-(coactor) return r

5.变长路径的属性匹配
//查询Charlie Sheen和Martin Sheen之间满足block属性为false的所有关系
match(charlie:Person{name:"Charlie Sheen"}),(martin:Person{name:"Martin Sheen"})
create(charlie)-[:X{blocked:FALSE}]->(:UNBLOCKED)<-[:X{blocked:FALSE}]-(martin)
create(charlie)-[:X{blocked:TRUE}]->(:BLOCKED)<-[:X{blocked:FALSE}]-(martin)
MATCH P=(charlir:Person)-[*{blocked:FALSE}]-(martin:Person)WHERE charlir.name="Charlie Sheen"and martin.name="Martin Sheen" return P

6.零长路径:
//查询电影本身以及一跳关系的演员和导演
match(wallstreet:Movie{title:"Wall Street"})-[*0..1]-(x)return x

7.命名路径
//如果想返回或者对路径进行过滤,可以将路径赋值给一个变量
match p=(michael{name:"Michael Douglas"})-->() return p

8.匹配一簇关系

(四)最短路径
1.单条最短路径shortesrPath
//在搜索最短路径时,可以使用关系类型/最大跳数,方向等约束
match(charlie:Person{name:"Charlie Sheen"}),(olive:Person{name:"Olive Stone"}),
p=shortestPath((martin)-[*1..15]-(olive))return p

2.带有断言的最短路径
//查询Charlie Sheen和Marin Sheen之间的最短路径,不考虑父子关系
match(charlie:Person{name:"Charlie Sheen"}),(martin:Person{name:"Marin Sheen"}),
p=shortestPath((martin)-[*]-(martin))
where NONE (r in rels(p) where type(r)="FATHER") return p

3.所有最短路径
match(martin:Person{name:"Martin Sheen"}),(michael:Person{name:"Michael Douglas"}),
p=allshortestPaths((charlie)-[*]-(michael)) return p

(五)通过ID查询节点或关系
1.通过id查询节点
//节点id为0
match(n) where id(n)=0 return n

2.通过id查询关系
//关系id为0,不推荐
match()-[r]-() where id(r)=0 return r

3.通过id查询多个节点
match(n) where id(n) in [0,3,5] return n

上一篇:java-学习5


下一篇:Scrum4.0+5.0