![](/img/trans.png)
[英]How to check if there is a relationship between two nodes in a single DB transaction/Query?
[英]How would I query for a relationship between these two nodes?
如果我有一个节点(p)和(e)像这样的图:
(p:Person)-[r:WorksFor]->(e:Employer)
我有以下数据:
(Person {name: Andrew})-[r:WorksFor]->(Employer {name: Google})
(Person {name: James})-[r:WorksFor]->(Employer {name: Google})
(Person {name: James})-[r:WorksFor]->(Employer {name: Apple})
(Person {name: Evan})-[r:WorksFor]->(Employer {name: Apple})
如何通过每种关系在(Person {name:Evan})之间进行查询,然后到达(Person {name:Andrew})之间,从而返回每个雇主和个人以及中间有任意数量的雇主和个人?
理想情况下,上面的代码将返回如下所示的链:
(Andrew)->(Google)->(James)->(Apple)->(Evan)
谢谢您的帮助。
(编辑)附录:
以下内容似乎可行,但仅当玩家分开两个角度时,有没有办法使长度完全可变?
MATCH
(p:Person {name: "Andrew"})-->(e:Employer)<--(p3:Person)-->(e2:Employer)<--(p2:Person {name: "Evan"})
RETURN *
您需要可变长度的模式匹配 。
根据您的图形,您可以定义要遍历或忽略类型的关系。 我们可以省略方向来指定我们不关心关系的遍历方向:
MATCH path = (p:Person {name: "Andrew"})-[:WorksFor*]-(p2:Person {name: "Evan"})
RETURN path
如果要在路径中包含节点,则可以返回nodes(path)
以获取该列表。
如果只需要这两者之间的最短路径,则可以将两者匹配,然后使用shortestPath函数进行匹配:
MATCH (p:Person {name: "Andrew"}), (p2:Person {name: "Evan"})
MATCH path = shortestPath((p)-[:WorksFor*]-(p2))
RETURN path
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.