Функции работы со списками

Подготовка данных

SELECT * FROM cypher('graph_name', $$
CREATE (A:Person {name: 'Alice', age: 38, eyes: 'brown'}),(B:Person {name: 'Bob', age: 25, eyes: 'blue'}),
        (C:Person {name: 'Charlie', age: 53, eyes: 'green'}),
        (D:Person {name: 'Daniel', age: 54, eyes: 'brown'}),
        (E:Person {name: 'Eskil', age: 41, eyes: 'blue', array: ['one', 'two', 'three']}),
        (A)-[:KNOWS]->(B),
        (A)-[:KNOWS]->(C),
        (B)-[:KNOWS]->(D),
        (C)-[:KNOWS]->(D),
        (B)-[:KNOWS]->(E)
$$) as (result agtype);

keys()

Функция keys() возвращает список строк, содержащий имена свойств вершины, ребра или карты.

Синтаксис: keys(expression)

Возвращаемое значение:

Список типа agtype, содержащий строковые элементы.

Параметры:

Имя Описание
expression Выражение, возвращающее вершину, ребро или карту.

Примечания:

  • keys(null) возвращает null.

Запрос:

SELECT * FROM cypher('graph_name', $$
        MATCH (a)
        WHERE a.name = 'Alice'
        RETURN keys(a)
$$) as (result agtype);

Возвращает список всех имён свойств вершины, привязанной к переменной a.

Результат:

result
["age", "eyes", "name"]
1 строка

range()

Функция range() возвращает список целочисленных значений в диапазоне от начального значения start до конечного значения end, где разница между любыми двумя последовательными значениями — step — постоянна (то есть арифметическая прогрессия). Диапазон включает оба конца: последовательность всегда содержит start, а end включается в зависимости от значений start, step и end.

Синтаксис: range(start, end [, step])

Возвращаемое значение:

Список типа agtype, содержащий целочисленные элементы.

Параметры:

Имя Описание
start Выражение, возвращающее целочисленное значение.
end Выражение, возвращающее целочисленное значение.
step Числовое выражение, определяющее постоянную разницу между последовательными значениями; по умолчанию 1.

Запрос:

SELECT *
FROM cypher('graph_name', $$
        RETURN range(0, 10), range(2, 18, 3)
$$) as (no_step agtype, step agtype);

Возвращает два списка целых чисел для указанных диапазонов.

Результат:

no_step step
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] [2, 5, 8, 11, 14, 17]
1 строка

labels()

Функция labels() возвращает список строк, содержащий метки вершины.

Синтаксис: labels(vertex)

Возвращаемое значение:

Список типа agtype, содержащий строковые элементы.

Параметры:

Имя Описание
vertex Выражение, возвращающее одну вершину.

Примечания:

  • labels(null) возвращает null.

Запрос:

SELECT *
FROM cypher('graph_name', $$
        MATCH (a)
        WHERE a.name = 'Alice'
        RETURN labels(a)
$$) as (edges agtype);

Возвращает список всех меток, присвоенных вершине, привязанной к переменной a.

Результат:

edges
["Person"]
1 строка

nodes()

Функция nodes() возвращает список всех вершин в пути.

Синтаксис: nodes(path)

Возвращаемое значение:

Список типа agtype, содержащий сущности вершин.

Параметры:

Имя Описание
path Выражение, возвращающее путь типа agtype.

Примечания:

  • nodes(null) возвращает null.

Запрос:

SELECT *
FROM cypher('graph_name', $$
        MATCH p = (a)-[]->(b)-[]->(c)
        WHERE a.name = 'Alice' AND c.name = 'Eskil'
        RETURN nodes(p)
$$) as (vertices agtype);

Возвращает список всех вершин в пути p.

Результат:

vertices
[{"id": 844424930131969, "label": "Person", "properties": {"age": 38, "eyes": "brown", "name": "Alice"}}::vertex, {"id": 844424930131970, "label": "Person", "properties": {"age": 25, "eyes": "blue", "name": "Bob"}}::vertex, {"id": 844424930131973, "label": "Person", "properties": {"age": 41, "eyes": "blue", "name": "Eskil", "array": ["one", "two", "three"]}}::vertex]
1 строка

relationships()

Функция relationships() возвращает список всех рёбер в пути.

Синтаксис: relationships(path)

Возвращаемое значение:

Список типа agtype, содержащий сущности рёбер.

Параметры:

Имя Описание
path Выражение, возвращающее путь типа agtype.

Примечания:

  • relationships(null) возвращает null.

Запрос:

SELECT *
FROM cypher('graph_name', $$
        MATCH p = (a)-[]->(b)-[]->(c)
        WHERE a.name = 'Alice' AND c.name = 'Eskil'
        RETURN relationships(p)
$$) as (edges agtype);

Возвращает список всех рёбер в пути p.

Результат:

edges
[{"id": 1125899906842640, "label": "KNOWS", "end_id": 844424930131989, "start_id": 844424930131988, "properties": {}}::edge, {"id": 1125899906842644, "label": "KNOWS", "end_id": 844424930131992, "start_id": 844424930131989, "properties": {}}::edge]
1 строка

toBooleanList()

Функция toBooleanList() преобразует список значений в список логических значений и возвращает его. Если какое-либо входное значение невозможно преобразовать в логическое, соответствующий элемент выходного списка равен null.

Синтаксис: toBooleanList(list)

Возвращаемое значение:

Список типа agtype, содержащий преобразованные элементы; каждый элемент — либо логическое значение, либо `null`, в зависимости от входного значения.

Примечания:

  • Элементы null во входном списке сохраняются как null.
  • Логические элементы во входном списке сохраняются без изменений.
  • Если входной параметр list равен null, функция возвращает null.
  • Если входное значение не является списком, возникает ошибка.

Запрос:

SELECT * FROM cypher('graph_name', $$RETURN toBooleanList(["true", "false", "true"])
$$) AS (toBooleanList agtype);

Результат:

toBooleanList
[true, false, true]
1 строка