RETURN

В части RETURN запроса указывается, какие элементы совпавшего шаблона должны быть выведены. Вывод может включать значения типа agtype, вершины, рёбра или свойства.

Возврат вершин

Чтобы вернуть вершину, укажите её в предложении RETURN.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (n {name: 'B'})
    RETURN n
$$) AS (n agtype);

Возвращает вершину.

Результат

n
{id: 0; label: ''; properties: {name: 'B'}}::vertex
(1 строка)

Возврат рёбер

Чтобы вернуть ребро, связанное с n, включите его непосредственно в список RETURN.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (n)-[r:KNOWS]->()
    WHERE n.name = 'A'
    RETURN r
$$) AS (r agtype);

Возвращает отношение.

r
{id: 2; startid: 0; endid: 1; label: 'KNOWS'; properties: {}}::edge
(1 строка)

Возврат свойств

Чтобы вернуть свойство, используйте нотацию с точкой.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (n {name: 'A'})
    RETURN n.name
$$) AS (name agtype);

Возвращает значение свойства name.

Результат

name
'A'
(1 строка)

Возврат всех элементов

Используйте *, чтобы вернуть все вершины, рёбра и пути, найденные запросом.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (a {name: 'A'})-[r]->(b)
    RETURN *
$$) AS (a agtype, b agtype, r agtype);

Возвращает обе вершины и ребро, использованные в шаблоне.

Результат

a b r
{"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "A", "happy": "Yes!"}}::vertex {"id": 1125899906842625, "label": "BLOCKS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge {"id": 281474976710660, "label": "", "properties": {"name": "B"}}::vertex
{"id": 281474976710659, "label": "", "properties": {"age": 55, "name": "A", "happy": "Yes!"}}::vertex {"id": 1407374883553281, "label": "KNOWS", "end_id": 281474976710660, "start_id": 281474976710659, "properties": {}}::edge {"id": 281474976710660, "label": "", "properties": {"name": "B"}}::vertex
(2 строки)

Переменные с особыми символами

Чтобы использовать имена переменных, содержащие не буквенно-цифровые символы, заключите их в обратные кавычки (`).

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (`This isn't a common variable`)
    WHERE `This isn't a common variable`.name = 'A'
    RETURN `This isn't a common variable`.happy
$$) AS (happy agtype);

Возвращает свойство happy вершины с именем "A".

Результат

happy
"Yes!"
(1 строка)

Псевдонимы столбцов

Чтобы присвоить возвращаемому полю имя, отличное от выражения, укажите псевдоним в списке определений столбцов.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (n {name: 'A'})
    RETURN n.name
$$) AS (objects_name agtype);

Возвращает свойство name вершины, но переименовывает выходной столбец.

Результат

objects_name
'A'
(1 строка)

Необязательные свойства

Если свойство может отсутствовать, его значение считается NULL.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (n)
    RETURN n.age
$$) AS (age agtype);

Возвращает свойство age, если оно присутствует; в противном случае — NULL.

Результат

age
55
NULL
(2 строки)

Другие выражения

Любое выражение — литералы, предикаты, свойства, функции или их комбинации — может находиться в RETURN.

Запрос

SELECT *
FROM cypher('graph_name', $$
    MATCH (a)
    RETURN a.age > 30, 'I''m a literal', id(a)
$$) AS (older_than_30 agtype, literal agtype, id agtype);

Возвращает предикат, строковый литерал и вызов функции с аргументом, заданным выражением шаблона.

Результат

older_than_30 literal id
true 'I''m a literal' 1
(1 строка)

Устранение дубликатов результатов

Ключевое слово DISTINCT возвращает только уникальные строки на основе выбранных выходных полей.

Примечание!
Хотя у каждой вершины уникален id, DISTINCT наиболее актуален, когда одна и та же вершина совпадает несколько раз через разные рёбра.
Например:
(A)-[:KNOWS]->(B) и (A)-[:LIKES]->(B).
Выполнение MATCH (a {name: 'A'})-[]->(b) RETURN b совпадёт с B дважды — один раз через KNOWS, второй — через LIKES, — и вернёт две одинаковые строки.
С DISTINCT вершина B появится лишь один раз.

Запрос

SELECT *
FROM cypher('graph_name', $$
MATCH (a {name: 'A'})-[]->(b)
RETURN DISTINCT b
$$) AS (b agtype);

Возвращает вершину с именем "B", но только один раз.

Результат

b
{id: 1; label: ''; properties: {name: 'B'}}::vertex
(1 строка)