所以,说我有一个像这样的节点列表:
A - > B - > C - > D - > ...
我想将节点F添加到此列表的开头。为了使这种模式复杂化,我可以将该列表中任何节点的引用作为“起始点”,我将从中获得起点。例如,我可以给出对节点“C”的引用,并且需要派生一个将返回对A的引用的算法。
我认为这应该能够通过诸如
之类的查询来完成 START n = node(*), a = node(*)
MATCH a -[:LINKED*]> n
WHERE n.id! = <ID>
RETURN a
如果我可以按长度对关系进行排序,我可以简单地将最长的路径作为关系中的第一个节点,然后沿着我的快乐方式前进。麻烦的是,我无法弄清楚如何按路径长度排序结果。我认为它一定是可能的,我只是缺少一个小的查询命令。任何人?
-pYr0
答案 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