리스트 함수#

리스트와 맵에 대한 함수들입니다. Cypher의 리스트는 jsonb 배열이므로, 이 함수들은 jsonb를 받고 jsonb를 반환합니다. 그래프 요소에 대한 collect()는 그 대신 네이티브 배열을 만들고, 배열 오버로드가 있는 함수는 둘 다에서 동작합니다.

Cypher는 리스트의 첨자를 0부터 세고, 슬라이스 list[a..b]는 상한을 포함하지 않습니다.

예제는 예제 데이터셋에서 실행됩니다.

array_size#

array_size ( list jsonb ) -> integer
array_size ( list json ) -> integer
array_size ( list anyarray ) -> integer

배열의 요소 개수를 반환합니다.

고려할 점

  • 배열만 받습니다. cardinality와 달리 맵의 키는 세지 않습니다.

  • 오버로드 세 개가 있어서 같은 이름이 Cypher 리스트, json 값, PostgreSQL 배열에서 모두 동작합니다.

RETURN array_size([1,2,3]) AS n;
 n
---
 3

cardinality#

2.18에 추가

cardinality ( value jsonb ) -> jsonb
cardinality ( p graphpath ) -> jsonb

리스트의 요소 수, 맵의 항목 수, 또는 경로의 정점과 간선 수를 반환합니다.

고려할 점

  • 문자열은 거부됩니다. 문자열에는 length를 쓰십시오.

RETURN cardinality('abc');
ERROR:  cardinality(): list or map is expected but "abc"
  • 경로에 대해서는 정점과 간선을 함께 세므로, 간선 하나인 경로는 3을 주고 같은 경로에 대한 length는 1을 줍니다.

  • PostgreSQL 자신의 cardinality(anyarray)도 네이티브 배열에 그대로 적용되며, jsonb가 아니라 integer를 반환합니다.

RETURN cardinality([1,2,3]) AS list, cardinality({a:1,b:2}) AS map;
 list | map
------+-----
 3    | 2
MATCH p=(:person {name:'Christopher Nolan'})-[:directed]->(:movie {title:'Inception'})
RETURN cardinality(p) AS elements;
 elements
----------
 3

head#

head ( list jsonb ) -> jsonb
head ( list anyarray ) -> anyelement

리스트의 첫 요소를 반환합니다.

고려할 점

  • 빈 리스트는 오류를 내지 않고 null을 반환합니다.

  • 배열 오버로드는 요소 자신의 타입을 반환하므로, 정점에 대한 head(collect(n))은 vertex를 반환합니다.

RETURN head([10,20,30]) AS first, last([10,20,30]) AS final, tail([10,20,30]) AS rest;
 first | final |   rest
-------+-------+----------
 10    | 30    | [20, 30]

keys#

keys ( map jsonb ) -> jsonb

맵의 키 이름 목록, 또는 그래프 요소의 속성 이름 목록을 반환합니다.

고려할 점

  • 순서는 jsonb 자신의 키 순서입니다. 키 길이순, 그다음 바이트순입니다. 삽입 순서도, 알파벳 순서도 아닙니다. 고정된 순서가 필요하면 결과를 정렬하십시오.

  • 정점이나 간선을 인자로 줄 수 있습니다. 그것이 자기 속성 맵으로 변환되기 때문입니다.

MATCH (p:person {name:'Keanu Reeves'}) RETURN keys(p) AS property_names;
  property_names
------------------
 ["born", "name"]
RETURN keys({title:'Inception', year:2010}) AS map_keys;
     map_keys
-------------------
 ["year", "title"]

last#

last ( list jsonb ) -> jsonb
last ( list anyarray ) -> anyelement

리스트의 마지막 요소를 반환합니다. 빈 리스트는 null을 반환합니다. 실제 예제는 head를 참고하십시오.

range#

range ( start integer, stop integer ) -> jsonb
range ( start integer, stop integer, step integer ) -> jsonb

start부터 stop까지의 정수 목록을 반환하며, 양 끝을 포함합니다.

이름

타입

설명

start

integer

목록의 첫 값입니다.

stop

integer

목록이 도달할 수 있는 마지막 값입니다. 걸음이 그 값에 떨어질 때 포함됩니다.

step

integer

증가량입니다. 생략하면 올라갈 때는 1, 내려갈 때는 −1입니다.

고려할 점

  • 결과는 PostgreSQL 배열이 아니라 jsonb이므로, 다른 Cypher 리스트와 마찬가지로 첨자를 붙이고 훑을 수 있습니다.

  • 양 끝이 포함됩니다. stop은 걸음이 그 값에 떨어질 때만 목록에 나타납니다. range(1,10,3)은 10에서 끝나지만 range(1,9,3)은 7에서 끝납니다.

  • stop이 start보다 작으면 음수 걸음 없이도 내려가며 셉니다.

RETURN range(1,5) AS up, range(1,10,3) AS step, range(5,1) AS down, range(5,1,-2) AS down_step;
       up        |     step      |      down       | down_step
-----------------+---------------+-----------------+-----------
 [1, 2, 3, 4, 5] | [1, 4, 7, 10] | [5, 4, 3, 2, 1] | [5, 3, 1]

tail#

tail ( list jsonb ) -> jsonb
tail ( list anyarray ) -> anyarray

리스트의 첫 요소를 뺀 나머지 전부를 반환합니다.

고려할 점

  • head와 last와 달리, 빈 리스트는 null이 아니라 빈 리스트를 반환합니다.

RETURN head([]) AS first, tail([]) AS rest;
 first | rest
-------+------
       | []

unnest#

2.18에 추가

unnest ( from_json jsonb ) -> setof jsonb

리스트를 요소마다 한 행으로 펼칩니다.

고려할 점

  • 집합 반환 함수입니다. Cypher에서는 자기가 놓인 절의 행을 곱합니다. FOR x IN list가 같은 생각의 절 형태이고, 요소를 이름에 바인딩해야 할 때는 그쪽이 읽기 쉽습니다.

  • 출력 컬럼의 이름은 value이므로, SQL에서는 SELECT value FROM unnest(...)로 씁니다.

  • PostgreSQL의 unnest(anyarray)도 네이티브 배열에 그대로 적용됩니다.

MATCH (m:movie {title:'The Matrix'}) RETURN unnest(m.embedding) AS component;
  component
-------------
 -0.07594558
 0.04081754
 0.29592122
 -0.11921061

뒤집기와 쪼개기#

리스트를 내놓는 함수 두 개는 그것이 나온 문자열 쪽에 문서화돼 있습니다. 문자열뿐 아니라 리스트도 뒤집는 reverse, 그리고 문자열을 리스트로 자르는 split입니다. 리스트 타입의 변환 세 가지는 타입 변환 페이지에 있습니다. toStringList, toIntegerList, toFloatList입니다.

호환성#

openCypher#

여기서 range()는 openCypher에서와 마찬가지로 stop을 포함합니다. openCypher의 reduce()는 지원되지 않습니다. 리스트 컴프리헨션이나 FOR를 쓰십시오. 패턴 컴프리헨션은 지원되지 않습니다.

관련 항목#