본문 바로가기

공부기록/Data Engineering

[neo4j] variables 변수 이해하기

반응형

 

cypher 쿼리에서 () 소괄호 [콜론 앞에] 오는 것은 변수이다.

p는 label이 Person 노드를 가리키는 변수, d는 ACTED_IN이라는 relationship을 가리키는 변수, m은 label이 Movie인 노드를 가리키는 변수이다.

sally 는 name 과 age라는 속성과 각각 'Sally'와 32라는 값을 갖는 노드를 만들때 해당 노드를 지칭하는 변수이다. sally와 john은 노드의 이름(id같은거x)이 아니라 변수이다.


cypher 쿼리에서 변수는 해당 쿼리 부분에서만 일시적으로 존재한다.

Person이라는 label로 sally, john이라는 노드를 추가하고, Book이라는 label에 'Graph Databases'를 추가했다.

이때 형광펜으로 칠한 부분 - sally, john, gdb은 모두 이 쿼리 내에서만 존재하는 변수이다.

따라서 변수를 사용해서 위의 쿼리가 원하는 노드/관계 생성이 잘 이루어진 결과를 볼 수 있다. 

변수를 해당 쿼리 밖에서 사용하면 어떻게 되는지 확인해보자. 

john 과 gdb라는 위의 쿼리에서 사용된 변수를 다른 쿼리에서 사용해 HAS_READ라는 관계를 만들어보면

Created 2 nodes라고 나온 부분에서 알 수 있듯이 label과 특징이 없는 두 개의 노드가 생성되고, 명령을 내린 속성값을 갖는 HAS_READ관계가 생성되었다.  회색으로 보이는 label이 없는 노드가 그것이다.

 

neo4j는 없는 변수를 사용하면 에러가 나는 것이 아니라 해당 노드나 관계를 생성한다.

 

27살 John이라는 이름의 노드를 지칭하는 변수 john 과  'Graph Databases'라는 이름의 Book 노드를 가리키는 gdb가 저장되어있지 않기 때문이다. 변수는 해당 쿼리 내에서만 유효하다. 

따라서, 원래 하려고했던 john과 graph databases책 사이의 HAS_READ관계를 생성하려면

아래그림과 같이 MATCH절로 해당 노드를 찾은다음 relationship을 create해야한다. 

실행결과 John과 Graph databases책 사이에 HAS_READ관계가 잘 만들어진 것을 확인 할 수 있다.

 

 

반응형