2012-06-25 4 views
0

Neo4j에서 cypher 또는 gremlin을 사용하여 공통 노드 집합이있는 노드 목록을 반환 할 방법이 있습니까?일반적인 노드 집합으로 연결된 노드를 반환하십시오.

Person1Friend2,Friend3을 알고 Person2Friend2,Friend3을 미워 Person2 때문에 반환해야하는, 내가 Person1 시작하고 "나에게 내가 아는 모든 사람을 싫어하는 사람들을 찾기", 말하고 싶은

Person1-[KNOWS]->Friend1 
Person1-[KNOWS]->Friend2 
Person1-[KNOWS]->Friend3 

Person2-[HATES]->Friend2 
Person2-[HATES]->Friend3 

것 .

내가 연결을 찾아 시작했습니다

,

START 
    person=node(1) 
MATCH 
    person-[KNOWS]->friend<-[HATES]-enemy 
RETURN 
    enemy 

그러나 나는 그런 사람이 모든 친구를 싫어한다는 것을 표현하는 방법을 찾을 수없는 것.

Cypher에서이 작업을 수행 할 수 있습니까? 다음과 같이

답변

1

구문은해야하지만, 난 집계 오류 메시지가

START 
    person=node(1) 
MATCH 
    person-[r1:KNOWS]->friend<-[r2:HATES]-enemy 
WHERE 
    count(distinct r1)=count(distinct r2) 
RETURN 
    enemy 

편집을 제거 할 수 없습니다 어쩌면이 가까이는 다음과 같습니다

거의 완벽
START 
    person=node(1) 
MATCH 
    person-[r1:KNOWS]->friend<-[r2:HATES]-enemy, person-[r3?:KNOWS]-enemy 
WITH 
    person, enemy, count(distinct r1) as rk1, count(distinct r2) as rk2,r3 
WHERE 
    r3 is null 
    AND 
    r1=r2 
RETURN 
    enemy 
+0

. 불행히도'r1'은'KNOWS' 관계이고'r2'는'HATES' 관계이기 때문에 적절한 결과를 반환하지 않을 것입니다. – Nicholas

+0

은 중요하지 않습니다. 왜냐하면 모든 친구들을 싫어하는 사람은 당신이 알고있는 HATE 유형의 관계와 동일한 금액 (개수)을 가져야하기 때문입니다. 따라서 카운트 (r1)와 카운트 (r2)를 비교하는 것이 적절한 방정식이어야합니다. – ulkas