我确实有以下关系,通过我的Cypher查询,我从Segment1
开始并相应地获得关系。
(Segment1)-[:Leaf]->(Op1)-[:Account]->(Ac2)-[:Parent]->(Acc1)-[:Parent]->(Acc)
我想获得[:Parent]
关系层次结构的最顶层节点。有没有办法获得它?
注意:我需要在Cypher中不使用循环的情况下获取它,因为这只是我查询的一部分。
预期输出
(Acc)
请帮我弄清楚这个
答案 0 :(得分:1)
此查询将起作用:
MATCH (Segment1)-[:Leaf]->(Op1)-[:Account]->(Ac2)-[*:Parent]->(Acc)
WHERE NOT (Acc)-[:Parent]->()
RETURN Acc;
与@ logisma的解决方案不同,此查询应该更高效,因为它会立即忽略具有传出Acc
关系的所有Parent
个候选者(而不是确定整个传出的大小)路径)。
答案 1 :(得分:0)
我相信这样的事情应该有效:
MATCH ({name:'Segment1'})-[:Leaf|:Account|:Parent*]->(b)
WITH collect(b) as nodes
RETURN last(nodes)
此查询从具有name = 'Segment1'
的节点开始,并遍历类型:Leaf
,:Account
和:Parent
与b
的关系。将b
收集到具有collect()功能的列表后。然后返回列表中的最后一个节点。这是由last()函数完成的。
答案 2 :(得分:0)
您应该尝试此查询:
MATCH (Segment1 {name:'Segment1'})-[:Leaf]->(Op1)-[:Account]->(Ac2)-[*:Parent]->(Acc)
WHERE size((Acc)-[:Parent]->()) = 0
RETURN Acc
最后一个[Parent]节点的定义由WHERE子句完成。
干杯