Database/GDB

Neo4j로 그래프db(gdb) 다루기: MERGE 1

Tech Signal 2021. 8. 11. 16:30

영어 원문: https://neo4j.com/docs/cypher-manual/current/clauses/merge/

 

MERGE: 데이터를 존재하는 node와 매치해 그걸 병합(bind)하거나 새로운 데이터(노드 등)를 생성해 병합한다. MATCH와 CREATE 을 합친 것과 같이 작동한다.

 

만약 특정한 이름을 갖는 유저 노드가 필요하다. 근데 그 이름을 갖는 노드가 없으면 새로운 노

드를 만든다.

 

성능 면에서 MERGE를 사용할 때엔 label이나 property에 스키마 인덱스를 만들어두는 것이 좋다

 

MERGE를 사용할 땐 완벽히 매치(full pattern)되어야한다. [all or nothing]

- 만약 부분적으로 비교해야할 경우 여러 MERGE 절로 쪼개 비교한다.


현재 'Charlie Sheen' 노드가 있다고 해도 다른 property(age)가 다르기 때문에 새로운 node가 생성된다.

 

CREATE INDEX PersonIndex FOR (n:Person) ON (n.name)

이런 식으로 index를 만들어두면 MERGE 문의 성능 향상 가능

 


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

ON CREATE SET을 사용해 CREATE 시에 자동으로 property를 추가해줄 수도 있다.

 

MERGE (person:Person)
ON MATCH
  SET 
  	person.found = true,
  	person.lastAccessed = timestamp()
RETURN person.name, person.found

ON MATCH SET으로 MATCH(조회, 매치)된 노드의 값을 바꿀 수도 있다.