리스트 함수#
리스트와 맵에 대한 함수들입니다. 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까지의 정수 목록을 반환하며, 양 끝을 포함합니다.
이름 |
타입 |
설명 |
|---|---|---|
|
|
목록의 첫 값입니다. |
|
|
목록이 도달할 수 있는 마지막 값입니다. 걸음이 그 값에 떨어질 때 포함됩니다. |
|
|
증가량입니다. 생략하면 올라갈 때는 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를 쓰십시오. 패턴 컴프리헨션은 지원되지 않습니다.
관련 항목#
모든 함수 — 모든 함수를 한 표에
집계 함수 — 리스트를 만드는
collect조건 함수 —
all,any,none,single,isEmptyjsonb 연산자와 함수 — 리스트 아래에 있는 연산자들