2014-11-18 4 views
5

Neo4j의 병합은 존재하지 않는 경우 새 노드를 만듭니다. 그리고 그것은 두 가지 구별로 ON CREATEON MATCH을 가지고 있습니다. 그러나 노드가 일치하는지에 관해 노드가 작성된 경우 다른 정보를 리턴하는 방법이 있습니까?Neo4j 병합은 생성 된 경우에만 무언가를 반환합니다.

MERGE (charlie { name:'Charlie Sheen' }) 
ON CREATE SET charlie.name = 'Charlie' 
RETURN charlie 

뭔가 같은 : ON CREATE RETURN 1, ON MERGE RETURN 0

+1

이 질문에 대한 답변을 확인하십시오. http://stackoverflow.com/questions/20274979/is-it-possible-to-determine-if-a-cypher-merge-results-in-a-create-or-a-match – JohnMark13

답변

7

relevant example on the merge page of the documentation있다 :

MERGE (keanu:Person { name:'Keanu Reeves' }) 
ON CREATE SET keanu.created = timestamp() 
ON MATCH SET keanu.lastSeen = timestamp() 
RETURN keanu.name, has(keanu.lastSeen); 

기본적으로이 존재 또는 "lastSeen"속성의 부재에 0 또는 1 플래그를 저장합니다.

"Charlie Sheen"과 일치하는 이상한 점이 있지만 일치 한 값 (name)을 "Charlie"로 수정하면 쿼리가 이상하게 보입니다. 이는 이상한 것입니다. 즉, 매번 수정하기 때문에 ON MATCH 절을 추가하더라도 절대 실행되지 않습니다. 매번 새로운 데이터베이스를 생성 한 다음 수정하여 다음 번에 해당 쿼리를 실행할 때 새로운 데이터베이스가 생성되도록 보장합니다. 특별한 상황이 아니라면 나중에 쿼리에서 조건을 수정하는 것은 나쁜 생각이라고 생각합니다.

+0

내 질문에 사이퍼가 있습니다. 그냥 임의의 예입니다. 나는이 질문에 대해서만 썼다. 상태 업데이트'likes'에이 기능을 구현하고 싶습니다. 기본적으로 나는 게시물이 사용자에 의해 두 번 좋아하지 않고 그 쿼리가'has (...)'정보를 제공하도록하고 싶다. 귀하의 대답은 내 문제를 해결합니다. 감사. – pewpewlasers

관련 문제