본문 바로가기

DKE/Neo4j

[Neo4j] UNWIND / 2023.02.13

https://neo4j.com/docs/cypher-manual/current/clauses/unwind/

 

UNWIND - Cypher Manual

`UNWIND` expands a list into a sequence of rows.

neo4j.com

UNWIND :풀다, 펴다

UNWIND를 사용하면 list를 개별 행으로 변환할 수 있음

UNWIND 절에서는 내부 변수의 새 이름을 지정해야 함

 

1. Unwinding a list

리터럴 목록을 x 행으로 변환하여 반환

#null을 포함한 원래 list의 값은 각각 개별 행으로 반환
UNWIND [1, 2, 3, null] AS x
RETURN x, 'val' AS y

2. Creating a distinct list

DISTINCT를 사용하여 중복된 list를 set으로 변환

WITH [1, 1, 2, 2] AS coll
UNWIND coll AS x
WITH DISTINCT x
RETURN collect(x) AS setOfVals

3. Using UNWIND with any expression returning a list

list를 반환하는 임의의 표현식은 UNWIND와 함께 사용될 수 있음

#두 개의 list (a와 b)는 연결되어 새 list를 형성
WITH  
[1, 2] AS a,  [3, 4] AS b
UNWIND (a + b) AS x
RETURN x

4. Using UNWIND with a list of lists

UNWIND를 여러 개 사용하여 중첩 list를 각각의 행으로 변환 할 수 있음

#첫 번째 UNWIND는 세 개의 행을 생성 [1, 2], [3, 4], 5
#두 번째 UNWIND는 행으로 생성 -> 총 5행
WITH [[1, 2], [3, 4], 5] AS nested
UNWIND nested AS x
UNWIND x AS y
RETURN y

5. Using UNWIND with an empty list

5-1)

빈 list는 UNWIND와 함께 사용 불가능 

빈 list는 행 수를 0으로 줄여 쿼리 실행을 중지시키고 결과를 반환하지 않음

UNWIND [] AS empty
RETURN empty, 'literal_that_is_not_returned'

5-2) 

빈 list와 UNWIND를 실수로 같이 사용하지 않도록 CASE를 사용하여 빈 list를 null로 바꿀 수 있음

WITH [] AS list
UNWIND
  CASE
    WHEN list = [] THEN [null]
    ELSE list
  END AS emptylist
RETURN emptylist

 

'DKE > Neo4j' 카테고리의 다른 글

[Neo4j] SKIP / 2023.02.15  (0) 2023.02.15
[Neo4j] ORDER BY / 2023.02.14  (0) 2023.02.14
[Neo4j] WITH / 2023.02.13  (0) 2023.02.13
[Neo4j] RETURN / 2023.02.08  (0) 2023.02.08
[Neo4j] MATCH (Get node or relationship by elementId) / 2023.02.08  (0) 2023.02.08