2017-12-17 3 views
0

neo4j 3.2.x를 사용하고 있습니다. 내가하려고하는 것은 두 노드 (사용자 및 성별) 간의 관계를 업데이트하고 관계로 끌어온 interestedInGender 속성이있는 단일 사용자 노드를 배열로 반환하는 쿼리를 작성하는 것입니다. 아래 쿼리에 문제가있어 지금은 interestedInGender에 대한 단일 값을 가진 여러 레코드를 반환합니다. 관계가 제대로 작성되지만 데이터를 리턴 할 때 여러 레코드가 리턴됩니다. 난 그냥 사용자 노드를 반환 싶어요. 단일 사용자 노드를 반환하기 위해이 쿼리를 수정할 수있는 방법이 있습니까? 성별 노드 ... 두 행이 동일한 u 노드가 두 개의 행,하지만 서로 다른 ig 노드 : 성별로 ig 일치 두에 일치하기 때문에neo4j에서 여러 레이블에 대해 일치하는 단일 노드를 반환하는 방법은 무엇입니까?

MATCH (u:User {_id:"1234"}) 
MATCH (ig:Gender) WHERE ig.value IN ["male", "female"] 
WITH u, ig 
OPTIONAL MATCH (u)-[igr:INTERESTED_IN_GENDER]->() 
DELETE igr 
with u, ig 
MERGE (u)-[:INTERESTED_IN_GENDER]->(ig) 
RETURN u{ 
    ._id, 
    interestedInGender: [(u)-[:INTERESTED_IN_GENDER]->(ig:Gender) | ig.value] 
} 

답변

0

당신이 여러 레코드 (행)를 얻고있는 이유입니다. 그 카디 낼 리티는 나머지 쿼리에서도 유지되므로 두 행을 되 찾을 수 있습니다.

당신은 다시 아래 1 당신이 관계를 병합 한 후 u의 중요도를 축소, 그래서 병합 후하지만 반환하기 전에이 작업을 추가해야합니다 :이`MATCH을하고 결국

WITH distinct u 
+0

(U : 사용자를 {_id "1234"}) U ​​ OPTIONAL MATCH (U) WITH 는 - [IGR은 : INTERESTED_IN_GENDER] ->()는 유 긴장 [ "남성", "여자"] AS MATCH igender (g과 IGR 삭제 : 성별 (값 : igender)) MERGE (u) - [: INTERESTED_IN_GENDER] -> (g) , 성별로는 (g)를RETURN u { ._id, interestedInGender : [(u) - [: INTERESTED_IN_GENDER] -> (iig : 성별) | iig.value] }' – Yalamber

+0

나는 별개의 u로 시도했지만, 단일 결과를 반환했지만 interestedInGender의 값은 단일 값이었습니다. – Yalamber

관련 문제