我有一个节点,我需要找到它的所有父关系直到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 )
答案 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)))