如何在Neo4j中获取根节点的路径

时间:2016-05-31 06:15:46

标签: neo4j cypher

这是我第一次玩neo4j,如果你能查看我的密码脚本,我将不胜感激。我有一个简单的MyNode树,它与nodeId相互连接。

NodeEntity:

@NodeEntity
public class MyNode {

    @GraphId
    private Long id;

    private Long nodeId;
    private int amount;

    @Relationship(type="BELONGS_TO", direction = Relationship.OUTGOING)
    private MyNode parent;

}

现在我希望所有节点都到达根节点,并使这些节点的amount字段的总和。如果我有这棵树:

100<-102<-103
100<-101

查询:

MATCH (p:MyNode)-[:BELONGS_TO*]->(c:MyNode) WHERE c.nodeId = 103 RETURN p.nodeId

返回空集(等待102,100),但是

MATCH (p:MyNode)-[:BELONGS_TO*]->(c:MyNode) WHERE c.nodeId = 100 RETURN p.nodeId

返回101,102,103,因此它以相反的方向工作(列出节点的所有子节点而不是向上节点的路径)。

1 个答案:

答案 0 :(得分:0)

你的树似乎是一棵有针对性的树。

100<-102<-103
100<-101

使用查询时

MATCH (p:MyNode)-[:BELONGS_TO*]->(c:MyNode) WHERE c.nodeId = 100 RETURN p.nodeId

这是有效的,因为关系箭头指向根节点。

  

103 - [:belongs_to的] - GT; 102 - [:belongs_to的] - →100

但是,当您使用以下查询时

MATCH (p:MyNode)-[:BELONGS_TO*]->(c:MyNode) WHERE c.nodeId = 103 RETURN p.nodeId

正在搜索

  

(:MYNODE) - [:belongs_to的*] - &GT; 103

然而在你的例子中,箭头指向远离103。

因此解决方案是将箭头指向另一个方向。

MATCH (p:MyNode)<-[:BELONGS_TO*]-(c:MyNode) WHERE c.nodeId = 103 RETURN p.nodeId

应该有用。

希望这有帮助。