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(조회, 매치)된 노드의 값을 바꿀 수도 있다.