2013-07-26 3 views
0

neo4j에서 일부 노드와 관계를 만들고 cypher를 사용하여 쿼리하려고합니다. 나는 그것에 대해 아래에 더 설명하고있다.Neo4j - 상호 개수가있는 목록 검색

UserID FriendID ApprovalStatus (1.Request Accepted, 2.Request Pending) 
------ -------- ------------------------------------------------------ 
1  2   1 
1  3   2 
1  6   2 
2  3   1 
2  4   1 
2  5   2 
3  6   1 
3  5   2 

내 로그인 사용자 노드 1 (. 예를 들어, 사용자 A)이며, 노드에서 검색하려고 다음과 같이

UserID UserName 
------ -------- 
1  UserA 
2  UserB 
3  UserC 
4  UserD 
5  UserE 
6  UserF 

와 노드 사이의 관계

이다. 나는 neo4j에서이 결과를 기대하고 있습니다.

Record # UserID UserName MutualCount  ApprovalStatus 
-------- ------ -------- --------------- -------------- 
1   2  UserB  1 (eg. node 3) 1    
2   3  Userc  0    2 
3   4  UserD  0    null 
4   5  UserE  0    null 
5   6  UserF  0    2 

검사에게 다음과 같은 사항 : 기록 # 1 : 노드 3 (UserC에게)은이 두 노드로 승인 여부 = 1을 가지고 있기 때문에와 노드 1 & 노드 2 사이의 상호입니다. 노드 1 & 노드 3 사이에 상호 없다
및 승인 여부 = 2 노드 1은 노드 3에 요청을 전송했지만 아직 보류중인 때문에 :

기록 # 2.

기록 # 3 : 2

기록 # 4 & 5 녹음 #에서 언급 한 바와 같이
같은 상황 : 여기
이 사이에 상호 없습니다 노드 1 & 노드 4, 및 승인 여부 = null이 노드 1은에 요청을 보낸 적이 있기 때문에 node4 & node5.

나는 그래서, 당신은 쿼리를 테스트 할 수 있습니다 here

에 대한 몇 가지 더미 데이터를 만들었습니다. 지난 10-15 일 동안이 결과를 얻으려고하지만 성공하지 못합니다. 이 결과를 얻을 수있는 방법이 있습니까?

감사합니다.

+0

당신은 '수용'에 대한 서로 다른 관계 유형을 사용하여 '대기'때 문제를 단순화 할 수 없습니다이 경우 다음과 같은 쿼리에서 WHERE 절을 드롭 수 ? 관계가 수락되면 '보류 중'을 제거하고 새로운 '수락'을 작성하십시오. –

+0

안녕하세요 @ 스 테판 암 브리 스터, 가능합니다. 분명히 할 것입니다. 비록 내가 원하는 결과를 얻는가? –

답변

0

당신이 찾고있는 것 같습니다, 그래서 A.

내가 추가로 B에서 추가 관계를 추가하는 very similar example을 만든 것입니다 어떤 상호 관계가없는 질문에 관계 테이블 상태가 "accepted"및 "requested"를 :FRIEND 관계로 전달하지만 주석에서 @Stefan이 언급 할 때 :REQUESTED_FRIEND:FRIEND과 같은 다른 관계 유형을 사용하면이 둘을 구분하는 것이 더 쉽습니다.

START n=node(*) 
MATCH n-[r:FRIEND]->m, m-[r2:FRIEND]->n 
WHERE r.status='accepted' AND r2.status='accepted' 
RETURN n, COUNT(m) AS MutualCount, COLLECT(m.name) 

반환 :

n     MutualCount  MutualWith 
(5 {name:"B"})  1    [A] 
(6 {name:"A"})  1    [B] 
+0

더 나아가서 이것을 설명하는 GraphGist를 만들 수 있다면 정말 멋지겠습니까! 예를 보려면 http://gist.neo4j.org/?6037834를 참조하십시오. –