2014-09-02 2 views
0

다음과 같은 그래프가 있습니다. 자주색 노드 (11376 & 11394)는 내 루트 노드입니다. 즉, 내 그래프가 시작됩니다.그래프의 한 경로와 일치하는 Cypher 쿼리

이제는 노드 11376에 대한 완성 경로, 즉 시작 노드에서 끝 노드까지 (보라색에서 노란색으로) 완성 된 방식으로 사이퍼 쿼리를 작성하려고합니다. 또한 내가 노드 11376을 말할 때 다른 노드 11394를 얻지 말아야한다. 어떻게 할 수 있는가?

나는 아래의 쿼리를 시도했지만 원하는 출력하지 않았다 : 그것은뿐만 아니라 즉, 다른 노드를주고있다

match (hh{id:'11376'})-[*0..2]-(n) return n; 

, 아래

11394이 neo4j의 grapg입니다 :

My graph

그래서 노드 11376에 대한 사이퍼 일치 쿼리를 작성하면 아래와 같이 완전한 경로를 얻어야합니다. enter image description here

어떻게해야합니까?

감사

답변

1

노란색 노드의 레이블 유형을 사용하여 다음과 같이 쿼리를 작성하십시오.

match path = (hh{id:'11376'})-[*0..3]-(n:YELLOW_NODE_LABEL_TYPE_HERE) 
return path; 

노란색 노드에 할당 한 레이블 유형을 가진 모든 노드로 (node ​​{id : '11376'})에서 3 홉 이하를 탐색하는 모든 경로를 반환합니다. 두 번째 자주색 노드를 통과하는 경로는 두 개의 자주색 노드를 통해 다른 노란색 노드로 이동하는 데 3 번 이상 걸리기 때문에 결과에 포함되지 않습니다.

+0

@Kelvin, 정말 고마워요. 당신이 제안한 것은 정말 많은 도움을 주었고 원하는 결과를 볼 수있었습니다. – shree11

0

그럼 당신은 당신이 당신의 쿼리를 지정할 수 있도록 최소 3 홉이있을 것이라는 점을 알고있다 : 당신은 제한 할 수 없습니다 노란색 노드의 레이블을하지 않고 그런데

MATCH p=(hh {id:11376})-[r*3]-(n)) RETURN p 

경로가 노란색 노드로 끝나야하므로 위의 쿼리에서 추가 경로가있을 수 있습니다.

+0

다른 계층 수준 노드에 대해 다른 레이블 이름이 있습니다. 또한 나는 쿼리 u를 시도했다. 즉,'Match m = (hh {id : 11376}) - [r * 3] - (prop)는 m을 반환하지만, 다른 루트 노드를 제공한다. 하지만 아래 마지막 노드에서 특정 속성 이름을 지정하면 다른 값을 제외한 해당 경로 만 제공합니다. 쿼리는'match p = (hh {id : 11376}) -() -() - (prop {pname : 11392}) return p;'. 하지만 루트 노드 11376에 대한 모든 노드와 관계를 원합니다. – shree11