【问题标题】:To get nodes and relationships between two specified nodes for review获取两个指定节点之间的节点和关系以供审查
【发布时间】:2021-10-20 07:36:25
【问题描述】:

我有一个包含数百万个节点和边缘数据的数据库,我想获取两个指定节点之间的所有节点和关系数据。 下面是具有 7 个节点和 7 个关系的图的示例数据。

要从第一个节点遍历到第7个节点,我可以使用可变长度关系方法,并且可以获得第一个和第7个节点之间的节点和关系(但是在这种方法中,我们需要知道第一个节点之间的关系和节点的数量和第 7 个节点)。 对于使用可变长度关系方法,我们必须指定我们将获得结束节点的数字,并且它会在一个方向上遍历。 但就我而言,我知道起始节点和结束节点,但不知道它们之间有多少关系和节点。请建议我如何为这种情况编写 Cypher 查询。

我使用了 APOC 生成树过程,它从第 1 个和第 7 个元素返回“路径”,但它不返回节点和关系。我可以使用生成树过程获取节点和关系数据吗?如何获取?

有没有其他方法可以在不使用 APOC 过程的情况下获取所有节点和两个节点之间的关系?

这里是使用 apoc 过程的查询:

MATCH (start:temp {Name:"Joel"}), (end:temp {Name:"Jack"}) CALL apoc.path.spanningTree(start,{terminatorNodes:[end]}) YIELD path return path

注意:在我们的图数据库中,节点可以有多向关系。

[示例节点和关系快照] :https://i.stack.imgur.com/nN9hk.png

【问题讨论】:

  • 您有兴趣找到两个节点之间的最短路径吗?
  • 是的@Tomaz,我需要两个指定节点之间的路径,但我需要指定路径上的节点和关系作为回报,我没有通过 APOC 程序响应获得。如果您可以帮助我在节点和关系方面获得 APOC 程序响应,这对我将非常有用,或者如果有一个 Cypher 查询可用于我不知道有多少关系和关系的情况,这将更有用节点将在开始节点和结束节点之间。提前谢谢你。

标签: neo4j cypher relationship neo4j-apoc


【解决方案1】:

我假设你不想在你的结果中有重复,所以我的方法是这样的

MATCH (start:temp {Name:"Joel"}), (end:temp {Name:"Jack"})
MATCH p=shortestPath((start)-[*]->(end))
UNWIND nodes(p) AS node
UNWIND relationships(p) AS rel
RETURN COLLECT(DISTINCT node) as nodes, COLLECT(DISTINCT rel) as rels

【讨论】:

    【解决方案2】:

    使用shortestPath 运算符可能会更好地找到两个节点之间的最短路径。

    MATCH (start:temp {Name:"Joel"}), (end:temp {Name:"Jack"})
    MATCH p=shortestPath((start)-[*]->(end))
    RETURN nodes(p) as nodes, relationships(p) as rels
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      相关资源
      最近更新 更多