2017-05-03 1 views
4

A-> B, A-> D, C-> A, B-> C, B-> D로 정의되는 그래프 관계가 있다고 가정합니다. 나는 Neo4j에 다음과 같은 서브 그래프 얻을 필요 -Neo4j는 1 차 노드 사이의 에지를 얻습니다.

  1. 를 노드 A에 대한 노드 즉, 모든 1도 연결 (indegree 또는 outdegree가)는 B, C, D
  2. 사이의 모든 가장자리를 얻기 것이다 받기 이 1도 노드. B 이후, C, D는 1도 연결이 있고, 가장자리는 1 차의 경우 D

B-> C, B->이 될 것입니다, 나는 다음과 같은 쿼리가 - 난

MATCH (s:Node)->(d:Node) 
WHERE s.name = 'A' OR d.name = 'A' 

을 동일한 쿼리에서 데이터의 두 번째 부분을 가져올 수 없습니다. 모든 노드를 반복해야합니까?

답변

3

이 당신이 노드에서 경로를 시작하는 것이라는 간단한 패턴입니다, 그것은 옆에있는 노드로 이동 한 다음 그 중 하나는 스타터 노드로 반환 할 수 있습니다

MATCH (A:Node {name:'A'}) WITH A 
MATCH (A)--(FD1:Node)-[r]-(FD2:Node)--(A) 
    WHERE ID(FD1) > ID(FD2) 
RETURN FD1, r, FD2 

P.S.을 그리고 당신은 관계의 방향을 지정할 수 없다는 것을 기억하십시오.

+0

왜 ID (FD1)> ID (F2) 절이 필요합니까? –

+0

@YashveerRana 관계가 지정되지 않았기 때문에 나타나는 중복을 제거합니다. –

관련 문제