이 상황에서 bbobbi랑 hail 다시 엮으려고 아래 쿼리 실행했더니
MATCH (n:Pet{name:"bbobbi"}) MERGE (n)-[r:RAISED_BY]->(n2:User{name:"hail", height:"155"})
새로운 hail 노드를 생성하면서 RAISED_BY 관계가 이어졌다
내가 원한 건 그냥 n과 n2를 r로 연결하는 것인데 MERGE 이하 문장에선 n-r-n2를 찾아서 이게 없으니까 생성한 것 같다.
merge는 create의 역할을 한다는 것을 잊지 말기!!!
BEST SOLUTION:
MATCH (n:User {name:'hail', height:'155'}) MATCH (n2:User {name:"hail", height:'165'}) MERGE (n)-[r:SAME_PERSON]-(n2)
처럼 MATCH로 n,n2를 각각 가져와서 MERGE로 연결하기
인 것 같다.
노드를 삭제하고 다시 만들어서 새로운 쿼리를 실행해보려고 하니
MATCH (n:User{name:"hail", height:"155"}), (b:Pet{name:"bbobbi"}) MERGE (n)-[r:HAS_PET]->(b)
cartesian product가 만들어질 수도 있다고 한다. 노드 개수가 많지 않아 현재로서는 unique한 조건이지만,
만약 데이터가 많아져 유사한 데이터가 존재한다면 이것은 매우.. 성능적으로 안 좋은 쿼리이다.
어쨌든 이 상황에는 새로운 노드가 생성되지 않고 잘 연결됐다.
원래 그냥 bbobbi(뽀삐)랑 hail(헤일)이랑 OWNER_OF라는 관계로 엮어져있었음
근데 r(엣지)을 수정해야해서
노드는 그대로 냅두고 r을 삭제하려고 아래의 쿼리를 실행했음
MATCH (n)-[r:OWNER_OF]->() DELETE r
띠용... 기존 노드 사이에 엣지가 삭제되고 (원래 하려던 작업)
기존 노드의 복사본들이 새로 만들어졌다.
쿼리를 실행하면서 이전 쿼리가 같이 실행됐나?
이유 아시는 분 댓글 부탁드립니다ㅠ
'Database > GDB' 카테고리의 다른 글
Neo4j로 그래프db(gdb) 다루기: SET (0) | 2021.08.12 |
---|---|
Neo4j로 그래프db(gdb) 다루기: MERGE, 여러 속성 유니크 제약조건 (node key constraints (0) | 2021.08.11 |
Neo4j로 그래프db(gdb) 다루기: MERGE 1 (0) | 2021.08.11 |