Neo4j亲子关系

时间:2016-01-26 10:08:41

标签: neo4j cypher py2neo

我有一个节点,我需要找到它的所有父关系直到root。

所以,如果我有: A-> B-> C-> d(根) A-> E-> F-> d(根)

A是我拥有的节点,我需要它的所有祖先。

我尝试了cypher查询:

MATCH (n:yo {name:"foo"})-[:HELLO*1..]->(p:yo) RETURN p

但它显示了这样一个列表:B,C,D,E,F。所以它们之间的联系就丢失了。是否有可能有[[B-> C-> D],[E-> F-> D]]等列表

我在网站上看到了这个查询并且有效。但它返回[[A,B],[A,B,C],[A,B,C,D]]。我不需要子路径。

start c = node:node_auto_index ( object_id = ‘10179’  )
MATCH path =  c <- [ : PARENT_OF* ] – p
return  distinct
length ( path )  AS PATH_LENGTH
, extract ( n in nodes ( path ) : n.object_id ) as the_path
order by length ( path )

1 个答案:

答案 0 :(得分:4)

你正在寻找这样的东西。匹配从 A 节点开始并以不是:CHILD_OF另一个节点的节点结束的路径。这将为您的示例数据返回两行节点集合:

MATCH p=(a:Node {name: 'A'})-[:CHILD_OF*]->(end:Node)
WHERE NOT (end)-[:CHILD_OF]->()
RETURN tail(nodes(p))

如果您想要返回单行,也可以collect()结果。

MATCH p=(a:Node {name: 'A'})-[:CHILD_OF*]->(end:Node)
WHERE NOT (end)-[:CHILD_OF]->()
RETURN collect(tail(nodes(p)))