2015-01-29 2 views
0

, 나는이 개 링크 노드를 만들어 작동하지 않습니다 질의 :는 예를 들어

+-----------------------------------------+ 
| a          | 
+-----------------------------------------+ 
| Node[1000]{name:"bruce wellis",id:"a1"} | 
+-----------------------------------------+ 
1 row 
Properties set: 1 

목 :

match (a:ACTOR {id: "a1"}) 
with a 
optional match (m:MOVIE {id: "m1"}) 
set m += { 
    title: "die easier" 
} 
return a; 

나는 결과를 가질 수 있습니다 e 쿼리가 액터 노드를 성공적으로 반환했습니다.

2 (업데이트)하지만 당신은 실패 일치 MOVIE 하위 쿼리를 만들 경우 :

match (a:ACTOR {id: "a1"}) 
with a 
optional match (m:MOVIE {id: "mm"}) 
set m += { 
    title: "die easier" 
} 
return a; 

내가 가지고 오류 :

CypherTypeException: Expected m to be a node or a relationship, but it was :`null`. 

어떻게 일치 배우의 결과를 반환하는 두 번째 쿼리를 만들기 위해?

답변

3

MATCH과 일치하지 않는 항목은 항상 행을 반환하지 않습니다.

그래서 # 2에서는 두 번째 MATCH이 실패 했으므로 행을 반환하지 않습니다.

MATCH 대신 OPTIONAL MATCH을 사용하면 결과가 표시됩니다.

[EDITED] 업데이트 된 질문에 대해,이 (다소 추한) 해결 방법은 작동합니다 :

MATCH (a:ACTOR {id: "a1"}) 
WITH a 
OPTIONAL MATCH (m:MOVIE {id: "mm"}) 
WITH a, COLLECT(m) AS cm 
FOREACH(m IN cm | SET m += {title: "die easier"}) 
RETURN a; 
+0

안녕하세요, 업데이트 된 질문을 참조하시기 바랍니다. 세트로 무비 노드를 업데이트하면 작동하지 않습니다. – null

+0

'm'이 NULL이면'SET' 절이 실패합니다. 대신이 절을 사용하십시오 :'SET m.title = "die easy"'. 'm'이 NULL이면 아무것도하지 않고 (오류를 일으키지 않습니다). – cybersam

+0

그러나 속성이 많은 경우 특히 [사이퍼 매개 변수] (http : // neo4j)를 사용하여 응용 프로그램에서 호출 한 경우 직접 노드 집합 ('SET m + = {params} ')을 사용하는 것이 편리합니다. co.kr/docs/stable/cypher-parameters.html). 이것에 대한 해결책이 있습니까? – null