Neo4j cypher shortestPath路径中节点上的match属性

Neo4j cypher shortestPath路径中节点上的match属性,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,为了简单起见,假设我有这样一个图(以演员/电影为例): 节点: 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) APPEAR

为了简单起见,假设我有这样一个图(以演员/电影为例):

节点:

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)
创建示例图的密码:

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})-[:出现在*0..14]-(b:Actor{id:3}))返回节点(p)

我们会得到一个结果


这就是我的问题所在。我如何要求中间的节点(特别是电影节点)只包含
分级:'R'
,作为其路径的一部分?
此查询将只返回两个演员之间最短路径的节点,其中所有电影都是R分级的

它过滤出电影节点,然后检查以确保集合中每个电影节点的评级为R

MATCH p=shortestPath((a:Actor { id: 1 })-[:APPEARS_IN*0..14]-(b:Actor { id: 3 })) 
WHERE all ( movie in filter( m in nodes(p) where 'Movie' in labels(m)) where movie.rating = 'R')
RETURN nodes(p)