MST

星途 面试题库

面试题:Neo4j中Cypher查询语言如何处理路径匹配

请举例说明在Neo4j的Cypher查询语言里,怎样使用语法来匹配节点间特定长度或可变长度的路径,并获取相关节点和关系的信息。
46.9万 热度难度
数据库Neo4j

知识考点

AI 面试

面试题答案

一键面试

在Neo4j的Cypher查询语言中:

  1. 匹配特定长度路径: 假设我们有一个电影数据库,节点类型为MoviePerson,关系类型为ACTED_IN。要匹配从PersonMovie长度为1的路径(即演员参演电影),查询如下:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
RETURN p.name, m.title

这里-[:ACTED_IN]->表示从Person节点出发,通过ACTED_IN关系到达Movie节点,长度为1。

如果要匹配长度为2的路径,比如导演执导演员参演的电影,假设关系类型有DIRECTED(从PersonMovie表示导演执导电影),查询如下:

MATCH (director:Person)-[:DIRECTED]->(movie:Movie)<-[:ACTED_IN]-(actor:Person)
RETURN director.name, movie.title, actor.name

这里(director:Person)-[:DIRECTED]->(movie:Movie)<-[:ACTED_IN]-(actor:Person)表示长度为2的路径。

  1. 匹配可变长度路径: 假设我们有一个社交网络,节点类型为User,关系类型为KNOWS,要匹配用户之间可变长度(最小长度1,最大长度不限)的路径,查询如下:
MATCH (u1:User)-[*1..]->(u2:User)
RETURN u1.name, u2.name

这里[*1..]表示关系路径的长度最小为1,最大不限制。如果要限制最大长度为3,查询如下:

MATCH (u1:User)-[*1..3]->(u2:User)
RETURN u1.name, u2.name

这里[*1..3]表示关系路径长度在1到3之间。同时还可以获取路径上的关系和节点详细信息,例如:

MATCH path=(u1:User)-[*1..3]->(u2:User)
RETURN nodes(path), relationships(path)

nodes(path)返回路径上的所有节点,relationships(path)返回路径上的所有关系。