2012-10-30 3 views
4

나는 간단한 소셜 네트워크 그래프 db 모델을 가지고 있습니다. 사용자는 다른 사용자를 팔로우하고 소식을 게시 할 수 있습니다. 나는 사용자가 사용자가Neo4j Cypher 쿼리 RETURN 고유 한 노드 집합

START a=node:node_auto_index(UserIdentifier = "USER0") 
MATCH (a)-[:POSTED]->(b), (a)-[:FOLLOWS]->(c)-[:POSTED]->(d) 
RETURN b, d; 

그것은 두의 십자가 제품을 반환을 게시 한 다음 어떤 그 누구와도 함께 게시 한 모든 게시물의 목록, B의 모든 값의 튜플을 얻기 위해 노력하고 있어요 d의 모든 값들과 합쳐졌다. (b x d) 나는 직설적 인 게시물 목록을 원합니다. 어떻게해야합니까? 두 가지 별도의 쿼리를 수행해야합니까? https://groups.google.com/forum/?fromgroups=#!topic/neo4j/SdM7bKNRDEA에서

답변

1

Anwsered : 당신은 (그리고 이럴 청소기 방법) 지금 그것을 할 수

START a=node:node_auto_index(UserIdentifier = "USER0") 
MATCH (a)-[:POSTED]->(b) 
WITH a, collect(b) as posts 
MATCH (a)-[:FOLLOWS]->(c)-[:POSTED]->(d) 
RETURN posts, collect(d) as followersPosts; 
1

또 다른 방법은 가변 길이의 관계를 활용하는 것입니다.

START user=node... 
MATCH (user) -[:FOLLOWS*0..1]-> (following) -[:POSTED]-> (post) 
RETURN post 

이 방법의 장점은 당신이 당신의 자신의 쿼리와 친구/다음 '쿼리 균일하게 모두를 집계 할 수 있습니다. 예 : 정렬, 제한, 페이지 매기기 등