【问题标题】:Traverse path cypher query遍历路径密码查询
【发布时间】:2014-12-22 10:16:07
【问题描述】:

我在我的php应用程序中使用neo4j的rest api,我的要求是从一个节点中找到相关的最近节点说“2”,并且需要找到的节点使用关系“road_to”相关。

这就像从第一层的一个位置找到最近的位置,然后是第二层等等。所有位置都使用路径“road_to”连接。

我有密码查询要查找,但是

1) 它反复给出我不需要的节点。

2) 我需要限制节点需要显示的程度,在查询中我必须一次又一次地给出 ()-[:road_to]->() ,为此我需要对级别进行一些限制

start n=node(2) Match (n)-[r:road_to]->()-[:road_to]->()-[:road_to]->(foaf) return r,foaf,n

任何帮助将不胜感激.Thanx

【问题讨论】:

    标签: neo4j cypher neo4jphp


    【解决方案1】:

    因此,折叠多个跃点的最简单方法是使用有限的可变长度路径,如下所示:

    MATCH (n)-[:road_to*1..3]-(foaf)
    WHERE id(n)=2
    RETURN n, foaf;
    

    请注意,我删除了 START 子句,转而使用 WHERE id(n)=2 支持 MATCH。不过它们基本上是一样的。这里运算符[:road_to*1..3] 匹配:road_to 关系的1 到3 跳。将您喜欢的任何限制放在那里,并在“变量关系”小节中阅读有关此方法here 的更多信息。

    如果您想找到符合某些条件的 SHORTEST 链接,那么您可以这样做:

    MATCH (n), (foaf),
      p = shortestPath((n)-[:road_to*..15]-(foaf))
    WHERE id(n) = 2 AND foaf.someProperty=someValue
    RETURN p
    

    在这里,我们将路径绑定到p,因此如果您想要该路径内的个体关系,您可以使用其他密码函数来获取它们。另请注意,我正在寻找一个特定的foaf,而不仅仅是任何一个。通常,当您寻找最短路径时,您正在寻找特定节点的路径。如果您有许多由:road_to 链接的节点,那么如果没有这个额外的条件,您只会获得一跳。

    更多关于最短路径can be found here

    【讨论】:

    • 感谢回复,我试过了,这是我已经得到的,但问题是结果中的重复节点
    最近更新 更多