在此图中,我想找到红色气泡中的所有灰色节点,而不是任何其他灰色节点。也就是说所有带有label:OTHER的节点都是A和C之间路径上节点的子节点.NB A和C之间的路径可能比这里显示的3个节点长。
所以我想要做的是获取路径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
答案 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