路径中每个节点上的cypher子查询

时间:2014-02-13 21:29:02

标签: neo4j cypher

在此图中,我想找到红色气泡中的所有灰色节点,而不是任何其他灰色节点。也就是说所有带有label:OTHER的节点都是A和C之间路径上节点的子节点.NB A和C之间的路径可能比这里显示的3个节点长。

enter image description here

所以我想要做的是获取路径p = A ... C和子查询路径中的每个节点 - [:HAS] - >(n:OTHER)关系。

但是我坚持使用子查询,因为它不是在初始查询的结果集上,而是在所有节点上。

所以这给了我所有的灰色节点:(而不仅仅是红色泡泡中的那些。请帮助

match p=(n:MAIN)-[:EXTENDS*]->(m:MAIN) 
where n.name = 'A' AND m.name='C' 
WITH nodes(p) AS collection 
match (l:MAIN)-[:HAS]->(u:OTHER) return u;  //This last part is my subquery

1 个答案:

答案 0 :(得分:10)

问题在于子查询的“MATCH”中没有使用第一个查询结果中的节点。

您可以使用标识符(例如“中间”)在所需路径A-B上明确指定节点,然后在子查询的匹配模式中使用它,

MATCH p=(n:MAIN)-[:EXTENDS*0..]->(middle:MAIN)-[:EXTENDS*0..]->(m:MAIN)  
WHERE n.name = 'A' AND m.name='C' 
WITH middle
MATCH (middle:MAIN)-[:HAS]->(u:OTHER)
RETURN u