【问题标题】:How to find all paths from a node如何查找节点的所有路径
【发布时间】:2019-10-11 00:16:52
【问题描述】:

我是 neo4j 的新手,我已经阅读了一些教程,但我一直坚持寻找从一个节点到另一个节点的所有路径,直到状态发生变化并且每次都有不同的路径。

我做了一张图片:

从顶部的节点开始,我想找到所有状态 = 1 的节点 T,我们从 O 类型的节点移动到具有 'o' 关系的 T 和从 T 移动到具有 'i' 关系的 O .如果我们到达一个状态 = 0 的节点 T,那么我们去 'i' 关系并检查 T 状态 = 1 等

我不知道图表的深度。我在手册上发现我们可以使用 [r*1..] 但我不知道如何在这里使用。

我试过了

match (o1:O)-[:o]-(t:T), (t)-[:i]-(o2:O)-[:o]-(t2:T) 
return o1, t, o2, t2

对于第一个深度,但我不知道如何在未知深度下进行,只要状态不是 1 就可以更深入

【问题讨论】:

  • 在您找到如何扩展查询之前,在您的关系上放置箭头确实会有所帮助;即MATCH (o1:O)-[:o]->(t:T),因为 Neo4j 可以利用方向来加快查询速度。
  • 在您的图表中,并非所有T 节点都有状态。 “从顶部开始”是指图表顶部的单个节点吗?你是否在逆向遍历关系?你能根据你的图表展示预期的结果吗?

标签: neo4j cypher


【解决方案1】:

您的架构看起来像这样(问号表示我不确定您想要在那里的关系)。 (:O)

您需要以某种方式确定您开始的第一个节点,我不确定您要从架构中获取哪些节点,但这样的事情会返回所有状态为 1 且以某种方式连接到的节点第一个节点,这里只是通过状态 0 来标识(因此实际上可能不止一个节点)。

MATCH (firstnode:O {Status: 0})<-[:o|:i*..]-(othernodes) WHERE othernodes.Status=1 RETURN othernodes

但请注意 - 任何 *.. 命令都需要永远运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2020-04-25
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多