繁体   English   中英

我将如何查询这两个节点之间的关系?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM