1. 文章
  2. 文章详情

Neo4j CQL - MATCH命令

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

查询节点

通过match子句查询数据库,match子句用于指定搜索的模式(Pattern),where子句为match模式增加谓词(Predicate),用于对Pattern进行约束;

Neo4j CQL MATCH 命令功能:

  • 从数据库获取有关节点和属性的数据
  • 从数据库获取有关节点,关系和属性的数据

节点查询

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

语法

MATCH 
(
   node-name:label-name
)

语法说明

语法元素描述
node-name这是我们要创建一个节点名称。
label-name这是一个节点的标签名称

注意事项 :

  • Neo4j 数据库服务器使用此 node-name 将此节点详细信息存储在 Database.As 中作为 Neo4j DBA 或 Developer,我们不能使用它来访问节点详细信息。

  • Neo4j 数据库服务器创建一个 label-name 作为内部节点名称的别名。作为 Neo4j DBA 或 Developer,我们应该使用此标签名称来访问节点详细信息。

注意:我们不能单独使用 MATCH Command 从数据库检索数据。 如果我们单独使用它,那么我们将 InvalidSyntax 错误。

1,查询所有节点

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

MATCH (n)
RETURN n

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

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

MATCH (movie:Movie)
RETURN movie.title

3,查询相关的任意节点

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

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

4,查询相关的特定节点

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

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

例如: 

MATCH (dept:Dept)

这里 

  • dept 是节点名称
  • Dept 是 emp 节点的标签名称

如果你观察到错误消息,它告诉我们,MATCH 经常需要与其他的语句配合才可以使用.

如:match (n) return n

# 查询Dept下的内容
MATCH (dept:Dept) return dept

# 查询Employee标签下 id=123,name="Lokesh"的节点
MATCH (p:Employee {id:123,name:"Lokesh"}) RETURN p

## 查询Employee标签下name="Lokesh"的节点,使用(where命令)
MATCH (p:Employee)
WHERE p.name = "Lokesh"
RETURN p

基本关系的查询

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

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

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

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

2,查询关系的类型

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

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

发表评论

登录后才能评论

评论列表(0条)