从Cypher查询中获取路径长度

时间:2013-07-03 01:03:22

标签: database list graph neo4j cypher

所以,说我有一个像这样的节点列表:

A - > B - > C - > D - > ...

我想将节点F添加到此列表的开头。为了使这种模式复杂化,我可以将该列表中任何节点的引用作为“起始点”,我将从中获得起点。例如,我可以给出对节点“C”的引用,并且需要派生一个将返回对A的引用的算法。

我认为这应该能够通过诸如

之类的查询来完成
    START n = node(*), a = node(*)
    MATCH a -[:LINKED*]> n
    WHERE n.id! = <ID>
    RETURN a

如果我可以按长度对关系进行排序,我可以简单地将最长的路径作为关系中的第一个节点,然后沿着我的快乐方式前进。麻烦的是,我无法弄清楚如何按路径长度排序结果。我认为它一定是可能的,我只是缺少一个小的查询命令。任何人?

-pYr0

2 个答案:

答案 0 :(得分:6)

长度是函数:http://docs.neo4j.org/chunked/stable/query-functions-scalar.html#functions-length

START n = node(*), a = node(*)
MATCH p=a -[:LINKED*]-> n
WHERE n.id! = <ID>
RETURN a
ORDER BY length(p) desc

答案 1 :(得分:1)

如果您想要列表的头部,您还可以匹配通向候选节点的可选关系。 如果这种关系不存在,你就在那里。

假设您获得了链中某个节点的ID

START n = node(<ID>)
MATCH () -[r?:LINKED]-> a -[:LINKED*]-> n
WHERE r = null
RETURN a