为简单起见,假设我有一个这样的图形(以演员/电影为例):
节点:
Actor(id:1)
Actor(id:2)
Actor(id:3)
Movie(id:4,rating:'PG-13')
Movie(id:5,rating:'PG-13')
关系:
Actor(id:1) APPEARS_IN Movie(id:4)
Actor(id:2) APPEARS_IN Movie(id:4)
Actor(id:2) APPEARS_IN Movie(id:5)
Actor(id:3) APPEARS_IN Movie(id:5)
Cypher创建示例图:
create (a1:Actor {id: 1, name: 'Actor 1'})
create (a2:Actor {id: 2, name: 'Actor 2'})
create (a3:Actor {id: 3, name: 'Actor 3'})
create (m1:Movie {id: 4, rating:'PG-13', name: 'Movie 1' } )
create (m2:Movie {id: 5, rating:'PG-13', name: 'Movie 2' } )
create (a1)-[:APPEARS_IN]->(m1)
create (a2)-[:APPEARS_IN]->(m1)
create (a2)-[:APPEARS_IN]->(m2)
create (a3)-[:APPEARS_IN]->(m2)
return *
所以现在我们想找到 Actor(id:1)
和 Actor(id:3)
之间的最短路径 . 这很容易,我们可能会尝试一个密码查询,如:
MATCH p=shortestPath((a:Actor { id: 1 })-[:APPEARS_IN*0..14]-(b:Actor { id: 3 })) RETURN NODES(p)
我们会得到一个结果 .
这就是我的问题所在 How can I put a requirement on the nodes in between (specifically the movie nodes) to only include rating:'R' as part of its path?
1 回答
此查询仅返回两个演员之间最短路径的节点,其中所有电影都被评为 R .
它过滤掉Movie节点,然后检查以确保集合中每个电影节点的评级为 R .