Neo4j Cypher查询返回沿任意长路径的节点

时间:2015-08-29 13:25:39

标签: neo4j cypher

我有一张Neo图表,如果我选择某些关系,那就是一棵树。

我想从任意节点开始,找到根目录下的所有节点。我想把两者之间的所有节点都归还给我,包括两端。在示例的情况下,我按顺序需要节点“a,t,c,d,e,ROOT”。

想象一下树有一个看起来像

的分支
a-[]->t-[]->c-[]->d-[]->e-[]->ROOT

如果我关心的关系是x,y和z,并且根节点被称为ROOT,并且起始节点具有某个id(唯一值),我得到这样的结果:

(a {id:an_id})-[*:x|y|z]->(root:ROOT) return a, root

这使我得以结束,但我如何获得它们之间的节点?

修改

节点(...)http://neo4j.com/docs/stable/query-functions-collection.html#functions-nodes

1 个答案:

答案 0 :(得分:4)

你几乎是对的:

您必须将表达式分配给路径,.e.g。 p

MATCH p= (a:Leaf {id:an_id})-[:x|:y|:z*]->(root:ROOT)
RETURN p,a,root, nodes(path);

使用shortestPath

可能更有效
MATCH p= shortestPath((a:Leaf {id:an_id})-[:x|:y|:z*]->(root:ROOT))
RETURN p,a,root, nodes(p);