获得Cypher中最顶层的节点

时间:2017-06-28 12:24:45

标签: neo4j cypher

我确实有以下关系,通过我的Cypher查询,我从Segment1开始并相应地获得关系。

(Segment1)-[:Leaf]->(Op1)-[:Account]->(Ac2)-[:Parent]->(Acc1)-[:Parent]->(Acc)

我想获得[:Parent]关系层次结构的最顶层节点。有没有办法获得它?

注意:我需要在Cypher中不使用循环的情况下获取它,因为这只是我查询的一部分。

预期输出

(Acc)

请帮我弄清楚这个

3 个答案:

答案 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:Parentb的关系。将b收集到具有collect()功能的列表后。然后返回列表中的最后一个节点。这是由last()函数完成的。

答案 2 :(得分:0)

您应该尝试此查询:

MATCH (Segment1 {name:'Segment1'})-[:Leaf]->(Op1)-[:Account]->(Ac2)-[*:Parent]->(Acc)
WHERE size((Acc)-[:Parent]->()) = 0
RETURN Acc

最后一个[Parent]节点的定义由WHERE子句完成。

干杯