Database/GDB 4

Neo4j로 그래프db(GDB) 다루기: relationship(Edge) 삭제하는데 갑자기 노드를 새로 생성한 경우, relationship 생성하는데 노드가 하나 더 생성된 경우

이 상황에서 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_..

Database/GDB 2021.08.12

Neo4j로 그래프db(gdb) 다루기: MERGE, 여러 속성 유니크 제약조건 (node key constraints

영어원문: https://neo4j.com/docs/cypher-manual/current/clauses/merge/ 이번엔 relationship(edge), 엣지를 그을 때의 MERGE 사용법을 다룬다. node(노드) 만들 때의 사용법은 바로 이전 글에. CREATE CONSTRAINT ON (n:Person) ASSERT n.name IS UNIQUE; CREATE CONSTRAINT ON (n:Person) ASSERT n.role IS UNIQUE; 이런식으로 노드의 property가 unique하도록 지정할 수 있다 + 다만 2020년 기준(neo4j 2.0.1) 여러 프로퍼티에 uniqueness 제약을 걸 수 없다고 한다. Enterprise edition neo4j 3.3에서는 node..

Database/GDB 2021.08.11

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

영어 원문: 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 Sh..

Database/GDB 2021.08.11