8.5.5.1 Длина переменной

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

(a)-[*2]->(b)

Этот образец описывает граф из трех узлов и двух связей, всех в одном пути (путь длиной 2). Такая запись эквивалентна следующей:

(a)-->()-->(b)

Также может быть задан диапазон длин: подобные образцы связей называются «связями переменной длины». Например:

(a)-[*3..5]->(b)

Т.е. минимальная длина равна 3, а максимальная - 5. Этот образец описывает граф, состоящий либо из 4 узлов и трех связей, либо 5 узлов и 4 связей, либо 6 узлов и 5 связей, связанных вместе в одном пути.

Любая граница может быть опущена. Например, для описания путей длиной 3 или более, используется запись

(a)-[*3..]->(b)

А для описания путей длиной 5 или менее, пишем:

(a)-[*..5]->(b)

Можно опустить обе границы, что описывает путь произвольной длины:

(a)-[*]->(b)

В качестве простого примера давайте рассмотрим следующий запрос:

MATCH (me)-[:KNOWS*1..2]-(remote_friend)
WHERE me.name = "Filipa"
RETURN remote_friend.name
remote_friend.name
"Dilshad"
"Anders"

Этот запрос находит данные в графе, форма которого отвечает такому образцу:

Определить узел (со значением свойства name, равным Filipa), и затем узлы со связью KNOWS на расстоянии одного или двух шагов. Это типичный пример нахождения друзей из первого и второго круга (друзья друзей).

Отметим, что связи переменной длины не могут использоваться с CREATE и MERGE.

8.5.6 Назначение идентификаторов пути

Как было упомянуто выше, последовательность связанных узлов и связей называется «путь». Cypher позволяет присваивать имя пути, используя идентификатор, например, так:

p = (a)-[*3..5]->(b)

Вы можете делать это в предложениях MATCH, CREATE и MERGE, но не при использовании образца в качестве выражения.

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