2016-05-31 18 views
1

これは私がneo4jで遊んで初めてのことです。私のcypherスクリプトを見ることができれば幸いです。私はMyNodeという単純なツリーを持っていて、nodeIdで互いに接続されています。Neo4jのルートノードへのパスを取得する方法

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 

そうしかし、

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

戻り101、102、103(102、100を待っている)空のセットを返します反対方向に動作します(ノードのすべての子をリストアップし、ルートノードに向かうパスではありません)。

答えて

0

あなたのツリーは、指示木のようです。

100<-102<-103 
100<-101 

クエリ

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

を使用する場合、これは関係の矢印は、ルートノードの方を向いているので、動作します。

103 - [:BELONGS_TO] - > 102 - [:BELONGS_TO] - > 100

しかし、あなたは、次のクエリを使用する場合

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

それは

を探しています

(:MyNode) - [:BELONGS_TO *] - > 103

しかし、あなたの例では、矢印だからソリューションは、他の方向に矢印を指すようにある103

から離れて指しています。

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

これは動作するはずです。

これが役に立ちます。

関連する問題