Neo4j-9-Match-Data

Neo4j 第九篇:查询数据(Match)

转载:https://www.cnblogs.com/ljhdo/p/10929702.html

参考:https://neo4j.com/docs/developer-manual/3.2/cypher/clauses/match/#match-introduction

Cypher 使用 match 子句查询数据,是 Cypher 最基本的查询子句。在查询数据时,使用 Match 子句指定搜索的模式,这是从 Neo4j 数据库查询数据的最主要的方法。match 子句之后通常会跟着 where 子句,向模式中添加过滤性的谓词,用于对数据进行过滤。在查询数据时,查询语句分为多个部分,with 子句用于对上一个查询部分的结果进行处理,以输出到下一个查询部分。

一 节点查询

对节点进行查询,是查询 graph 的基本操作,节点具有标签和属性,Match 查询不仅能够按照标签对节点进行查询,还能按照属性对节点进行查询。 当没有指定节点的标签或属性时,默认是选择节点全部的标签和属性。

1 查询所有节点

仅仅指定一个节点的模式,没有标签(Lable)和属性,表示查询所有的节点:

1
2
MATCH (n)
RETURN n

2 查询带有特定标签的节点

当模式中指定标签时,表示只查询带有特定标签的节点,有多个标签的节点,只要含有指定的标签,就成功匹配,绑定该节点。

1
2
MATCH (movie:Movie)
RETURN movie.title

3 查询相关的任意节点

指定一个节点,节点的 name 属性是 ‘Oliver Stone’,查询跟该节点相关的其他节点:

1
2
MATCH (director { name: 'Oliver Stone' })--(movie)
RETURN movie.title

4 查询相关的特定节点

指定一个节点,查询跟节点相关的节点,并指定相关节点的标签

1
2
MATCH (:Person { name: 'Oliver Stone' })--(movie:Movie)
RETURN movie.title

二 基本关系的查询

对关系进行查询,关系的模式是由两个节点来决定的。

1 指定关系的方向来查询节点

对于标签是 Person,并且 name 属性是 ‘Oliver Stone’ 的节点,该节点指向另外一个节点 movie:

1
2
MATCH (:Person { name: 'Oliver Stone' })-->(movie)
RETURN movie.title

2 查询关系的类型

在查询关系时,可以在 match 子句中指定关系变量,后续子句可以引用该变量,例如,使用 type() 函数查看关系的类型:

1
2
MATCH (:Person { name: 'Oliver Stone' })-[r]->(movie)
RETURN type(r)

3 匹配关系类型

在匹配关系时,可以指定关系的类型

1
2
MATCH (wallstreet:Movie { title: 'Wall Street' })<-[:ACTED_IN]-(actor)
RETURN actor.name

4 匹配多种关系类型

在匹配关系时,可以指定多种关系的类型,只需要匹配其中任意一个关系类型就匹配成功

1
2
MATCH (wallstreet { title: 'Wall Street' })<-[:ACTED_IN|:DIRECTED]-(person)
RETURN person.name

5 匹配关系类型,并指定关系变量

1
2
MATCH (wallstreet { title: 'Wall Street' })<-[r:ACTED_IN]-(actor)
RETURN r.role

6 匹配多个关系

1
2
MATCH (charlie { name: 'Charlie Sheen' })-[:ACTED_IN]->(movie)<-[:DIRECTED]-(director)
RETURN movie.title, director.name

三 匹配路径

路径是节点和关系交替组合构成的序列,图中必须满足路径指定的模式,才能返回路径中的元素。

1 对变长路径的查询

1
2
MATCH (martin { name: 'Charlie Sheen' })-[:ACTED_IN*1..3]-(movie:Movie)
RETURN movie.title

2 路径变量

1
2
MATCH p =(actor { name: 'Charlie Sheen' })-[:ACTED_IN*2]-(co_actor)
RETURN relationships(p),p

3 根据路径的属性进行匹配

1
2
3
MATCH p =(charlie:Person)-[* { blocked:false }]-(martin:Person)
WHERE charlie.name = 'Charlie Sheen' AND martin.name = 'Martin Sheen'
RETURN p
Contents
  1. 1. Neo4j 第九篇:查询数据(Match)
    1. 1.1. 一 节点查询
      1. 1.1.1. 1 查询所有节点
      2. 1.1.2. 2 查询带有特定标签的节点
      3. 1.1.3. 3 查询相关的任意节点
      4. 1.1.4. 4 查询相关的特定节点
    2. 1.2. 二 基本关系的查询
      1. 1.2.1. 1 指定关系的方向来查询节点
      2. 1.2.2. 2 查询关系的类型
      3. 1.2.3. 3 匹配关系类型
      4. 1.2.4. 4 匹配多种关系类型
      5. 1.2.5. 5 匹配关系类型,并指定关系变量
      6. 1.2.6. 6 匹配多个关系
    3. 1.3. 三 匹配路径
      1. 1.3.1. 1 对变长路径的查询
      2. 1.3.2. 2 路径变量
      3. 1.3.3. 3 根据路径的属性进行匹配
|