【问题标题】:Neo4j - Traversing from one node to another which are indirectly connected by parent NodeNeo4j - 从一个节点遍历到另一个由父节点间接连接的节点
【发布时间】:2017-04-07 10:08:23
【问题描述】:

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

我想找出 X 和 Y 之间的关系,即他们为同一家公司工作。

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

【问题讨论】:

    标签: neo4j graph-databases


    【解决方案1】:

    这取决于您是在寻找特定的连接(通过 :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
    

    【讨论】:

    • 我一直在寻找最短路径,即我们不知道有公司将它们联系起来。完美的答案。
    猜你喜欢
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    相关资源
    最近更新 更多