Cypher使用match子句查询数据,是Cypher最基本的查询子句。在查询数据时,使用Match子句指定搜索的模式,这是从Neo4j数据库查询数据的最主要的方法。match子句之后通常会跟着where子句,用于向模式中添加过滤谓词,对数据进行过滤。在查询数据时,查询语句分为多个部分,with子句用于对上一个查询部分的结果进行处理,以输出到下一个查询部分。
一,节点查询
对节点进行查询,是一个基本的操作。
1,查询所有节点
仅仅指定一个节点的模式,没有标签(Lable),没有属性,返回所有的节点:
MATCH (n) RETURN 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
3,匹配多种关系类型
MATCH (wallstreet { title: 'Wall Street' })<-[:ACTED_IN|:DIRECTED]-(person) RETURN person.name
4,匹配关系类型,并指定关系变量
MATCH (wallstreet { title: 'Wall Street' })<-[r:ACTED_IN]-(actor) RETURN r.role
5,匹配多个关系
MATCH (charlie { name: 'Charlie Sheen' })-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director) RETURN movie.title, director.name
三,匹配路径
路径是节点和关系交替组合构成的序列,图中必须满足路径指定的模式,才能返回路径中的元素。
1,对变长路径的查询
MATCH (martin { name: 'Charlie Sheen' })-[:ACTED_IN*1..3]-(movie:Movie) RETURN movie.title
2,路径变量
MATCH p =(actor { name: 'Charlie Sheen' })-[:ACTED_IN*2]-(co_actor) RETURN relationships(p),p
3,根据路径的属性进行匹配
MATCH p =(charlie:Person)-[* { blocked:false }]-(martin:Person) WHERE charlie.name = 'Charlie Sheen' AND martin.name = 'Martin Sheen' RETURN p
参考文档: