节点获取
1.获得所有的节点
MATCH (n)
RETURN n
注意这里的n是一个变量名,代表了我们所取的所有节点
2.获得相应标签节点
MATCH (movie:Movie)
RETURN movie.title
获得所有电影的名称
3.获得关系节点
MATCH (director { name: 'Oliver Stone' })--(movie)
RETURN movie.title
获得该导演所有的电影
4.获得标签节点
MATCH (:Person { name: 'Oliver Stone' })--(movie:Movie)
RETURN movie.title
关系获取
1.外向关系
MATCH (:Person { name: 'Oliver Stone' })-->(movie)
RETURN movie.title
2.已知节点,获得类型
MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie)
RETURN type(r)
3.已知一种关系类型,获得节点
MATCH (wallstreet:Movie { title: 'Wall Street' })<-[:ACTED_IN]-(actor)
RETURN actor.name
获得所有华尔街演员
4.已知多种关系类型,获得节点
MATCH (wallstreet { title: 'Wall Street' })<-[:ACTED_IN|:DIRECTED]-(person)
RETURN person.name
获得华尔街导演和演员
5.已知节点和关系类型,获取关系属性
MATCH (wallstreet { title: 'Wall Street' })<-[r:ACTED_IN]-(actor)
RETURN r.role
深度关系
1.Relationship types with uncommon characters
MATCH (n { name: 'Rob Reiner' })-[r:`TYPE
WITH SPACE`]->()
RETURN type(r)
2.多层关系
MATCH (charlie { name: 'Charlie Sheen' })-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)
RETURN movie.title, director.name
获得查理主演的电影和导演
3.已知关系长度
MATCH (martin { name: 'Charlie Sheen' })-[:ACTED_IN*1..3]-(movie:Movie)
RETURN movie.title
获得所有电影和查理相差1到3个跳点.
4.节点之间相差不确定长度
MATCH p =(actor { name: 'Charlie Sheen' })-[:ACTED_IN*2]-(co_actor)
RETURN relationships(p)
5.节点相差不确定长度且包含属性
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)
6.0长度路径
MATCH (wallstreet:Movie { title: 'Wall Street' })-[*0..1]-(x)
RETURN x
7.返回过滤路径
MATCH p =(michael { name: 'Michael Douglas' })-->()
RETURN p
8.Matching on a bound relationship
MATCH (a)-[r]-(b)
WHERE id(r)= 0
RETURN a,b
最短路径
1.最短路径方法
使用shortestPath
方法获得两个节点的最短路径
MATCH (martin:Person { name: 'Martin Sheen' }),(oliver:Person { name: 'Oliver Stone' }), p = shortestPath((martin)-[*..15]-(oliver))
RETURN p
2.最短路径判定
MATCH (charlie:Person { name: 'Charlie Sheen' }),(martin:Person { name: 'Martin Sheen' }), p = shortestPath((charlie)-[*]-(martin))
WHERE NONE (r IN relationships(p) WHERE type(r)= 'FATHER')
RETURN p
3.获得所有最短路径
MATCH (martin:Person { name: 'Martin Sheen' }),(michael:Person { name: 'Michael Douglas' }), p = allShortestPaths((martin)-[*]-(michael))
RETURN p
通过id获取节点和关系
1.通过id获得节点
MATCH (n)
WHERE id(n)= 0
RETURN n
2.通过id获得关系
MATCH ()-[r]->()
WHERE id(r)= 0
RETURN r
3.多个id获取节点
MATCH (n)
WHERE id(n) IN [0, 3, 5]
RETURN n
参考文献:
https://neo4j.com/docs/developer-manual/3.4/cypher/clauses/match/