12.3.4 EXTRACT

Чтобы вернуть единственное свойство или значение функции из коллекции узлов или связей, вы можете использовать EXTRACT. Она пройдет по коллекции, запустит выражение на каждом элементе и вернёт результаты в коллекцию с этими значениями. Функция работает подобно методу map в функциональных языках, подобных Lisp и Scala.

Синтаксис:

EXTRACT( identifier in collection | expression )

Аргументы:

Запрос

MATCH p=(a)-->(b)-->(c)
WHERE a.name='Alice' AND b.name='Bob' AND c.name='Daniel'
RETURN extract(n IN nodes(p)| n.age) AS extracted

возвращает свойство age для всех узлов в пути.

Таблица 12.17 Результат

extracted
[38,25,54]

12.3.5 FILTER

FILTER возвращает все элементы в коллекции, которые согласуются с предикатом.

Синтаксис:

FILTER(identifier in collection WHERE predicate)

Аргументы:

Запрос

MATCH (a)
WHERE a.name='Eskil'
RETURN a.array, filter(x IN a.array WHERE length(x)= 3)

возвращает свойство с именем array и список значений в нём, которые имеют длину 3.

Таблица 12.18 Результат

a.arrayfilter(x in a.array WHERE length(x) = 3)
["one","two","three"]["one","two"]

12.3.6 TAIL

TAIL возвращает все элементы в коллекции кроме первого.

Синтаксис:

TAIL( expression )

Аргументы:

Запрос

MATCH (a)
WHERE a.name='Eskil'
RETURN a.array, tail(a.array)

возвращает свойство с именем array и все элементы этого свойства за исключением первого.

Таблица 12.19 Результат

a.arraytail(a.array)
["one","two","three"]["two","three"]

12.3.7 RANGE

Возвращает числовые значения в диапазоне с ненулевым значение шага step. Диапазон включает обе границы.

Синтаксис:

RANGE( start, end [, step] )

Аргументы:

Запрос

RETURN range(0,10), range(2,18,3)

возвращает два списка чисел.

Таблица 12.20 Результат

range(0,10)range(2,18,3)
[0,1,2,3,4,5,6,7,8,9,10][2,5,8,11,14,17]

12.3.8 REDUCE

Вы можете использовать REDUCE для выполнения выражения на отдельных элементах коллекции и сохранять результат выражения в накопителе. Функция обойдет коллекцию, выполнит выражение на каждом элементе, сохраняя частичный результат в накопителе. Это работает подобно методам fold или reduce в функциональных языках программирования типа Lisp и Scala.

Синтаксис:

REDUCE( accumulator = initial, identifier in collection | expression )

Аргументы:

Запрос

MATCH p=(a)-->(b)-->(c)
WHERE a.name='Alice' AND b.name='Bob' AND c.name='Daniel'
RETURN reduce(totalAge = 0, n IN nodes(p)| totalAge + n.age) AS reduction

Свойство age для всех узлов в пути суммируется и возвращается как единственное значение.

Таблица 12.21 Результат

reduction
117

Предыдущая | Следующая