这是我第一次玩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,因此它以相反的方向工作(列出节点的所有子节点而不是向上节点的路径)。
答案 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
应该有用。
希望这有帮助。