面试题答案
一键面试在Neo4j的Cypher查询语言中:
- 匹配特定长度路径:
假设我们有一个电影数据库,节点类型为
Movie
和Person
,关系类型为ACTED_IN
。要匹配从Person
到Movie
长度为1的路径(即演员参演电影),查询如下:
MATCH (p:Person)-[:ACTED_IN]->(m:Movie)
RETURN p.name, m.title
这里-[:ACTED_IN]->
表示从Person
节点出发,通过ACTED_IN
关系到达Movie
节点,长度为1。
如果要匹配长度为2的路径,比如导演执导演员参演的电影,假设关系类型有DIRECTED
(从Person
到Movie
表示导演执导电影),查询如下:
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的路径。
- 匹配可变长度路径:
假设我们有一个社交网络,节点类型为
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)
返回路径上的所有关系。