【发布时间】:2017-04-07 10:08:23
【问题描述】:
我有一个特定的案例,其中我有两个标签 Person 和 Company。 Person 有两个节点 X 和 Y,Company 有一个 Single Node。 两人都与公司 HAS_EMPLOYEE 有关系。
我想找出 X 和 Y 之间的关系,即他们为同一家公司工作。
如何在 Neo4j 中做到这一点?只给定节点 X 和 Y?
【问题讨论】:
标签: neo4j graph-databases
我有一个特定的案例,其中我有两个标签 Person 和 Company。 Person 有两个节点 X 和 Y,Company 有一个 Single Node。 两人都与公司 HAS_EMPLOYEE 有关系。
我想找出 X 和 Y 之间的关系,即他们为同一家公司工作。
如何在 Neo4j 中做到这一点?只给定节点 X 和 Y?
【问题讨论】:
标签: neo4j graph-databases
这取决于您是在寻找特定的连接(通过 :Company 节点),还是只是在寻找任何连接。
假设:Person 节点有一个名字,而 Person 节点 X 和 Y 有名字 'x' 和 'y',所以我们可以匹配它们。假设您在 :Person(name) 上有一个索引,因此我们可以快速查找节点。
如果我们想要的查询是“人 x 和 y 是否共享同一家公司”,则返回相关公司的查询是:
match (x:Person{name:'x'})<-[:HAS_EMPLOYEE]-(comp:Company)-[:HAS_EMPLOYEE]->(y:Person{name:'y'})
return comp
但如果我们不知道这些人是如何联系起来的,或者即使他们是联系在一起的,那么我们可能希望在节点之间运行shortestPath() 匹配,看看是什么连接了他们。
这有助于为这个匹配设置一个上限。现在让我们最多使用 8 跳。
match path=shortestPath((x:Person{name:'x'})-[*..8]-(y:Person{name:'y'}))
return path
【讨论】: