2016-05-31 10 views
1

neo4j를 처음 사용하는 경우입니다. 내 사이퍼 스크립트를 볼 수 있다면 감사하게 생각합니다. 나는 nodeId로 서로 연결된 MyNode의 단순한 트리가있다.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 

.

희망이 도움이됩니다.

관련 문제