Поскольку nodes(path)
является списком узлов, вы можете использовать индексный доступ для получения соответствующего среза узлов в пути и использовать его для своей фильтрации:
...
WITH n, end
OPTIONAL MATCH path = (n:Label1)<-[:REL2]-(a:Label2)-[:CONSTRICT_HOPS_TO_LABEL*..]->(b)<-[:REL3]-(c:Label3)-[:REL4]->(end:Label1),
WHERE ALL(node IN nodes(path)[2..-3] WHERE node:Label)
WITH b, ...
...
nodes(path)[0..2]
is [n, a]
, поэтому, если вы хотите, чтобы узлы проходили мимо a
(но не включая сам a
), вы должны начать с 2.
Отрицательные индексы - это элементы в конце списка, поэтому -3
означает, что он исключит последние 3 элемента списка, включая [b, c, end]
.
Если вы хотите включить a
, а также b
, тогда ваш срез будет nodes(path)[1..-2]
вместо