Neo4j - 从一个节点遍历到另一个节点,由父节点间接连接

时间:2017-04-07 10:08:24

标签: neo4j graph-databases

我有一个特定的案例,我有两个标签人和公司。 Person有两个节点X和Y,公司有一个单节点。 两人都与公司HAS_EMPLOYEE有关系。

我想找到X和Y之间的关系,即它们适用于同一家公司。

如何在Neo4j中做到这一点?只给出节点X和Y?

1 个答案:

答案 0 :(得分:1)

这取决于您是否正在寻找特定连接(通过:公司节点),或者只是寻找任何连接。

让我们说:人员节点有一个名字,那个人节点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