2

所以,假设我有一个这样的节点列表:

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

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

我认为这应该可以通过查询来完成,例如

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

如果我可以按长度对关系进行排序,我可以简单地将最长的路径作为关系中的第一个节点,然后沿着我快乐的方式前进。麻烦的是,我不知道如何按路径长度对结果进行排序。我认为这一定是可能的,我只是缺少一个小查询命令。有接盘侠吗?

-pYr0

4

2 回答 2

10

长度是函数: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
于 2013-07-03T04:40:11.730 回答
1

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

假设你得到了ID链中某个节点的:

START n = node(<ID>)
MATCH () -[r?:LINKED]-> a -[:LINKED*]-> n
WHERE r = null
RETURN a
于 2013-07-03T15:38:36.927 回答