Выполнение ПОИСКПОЗ на всех узлах пути


person Fynn    schedule 08.12.2012    source источник


Ответы (1)


Вы можете сделать это, используя WHERE ALL, например:

START n=node(0) 
MATCH path = n -[:rel1]-> x -[:rel2]-> y -[:rel3]-> z 
WHERE ALL(n in tail(nodes(path)) WHERE ()-[:rel1]->n) 
RETURN z

tail(nodes(path)) возвращает все узлы пути, кроме первого. В вашем примере начальный узел не был связан с отношением rel1, поэтому ничего не было возвращено. Если вы хотите сделать это так, как объясняет ваш текст, просто отпустите хвостовую часть.

Это то, что вы искали?

person Andres    schedule 08.12.2012
comment
Ницца! Это то, что я искал. Я отредактировал вопрос, касающийся части TAIL, чтобы прояснить проблему. Спасибо за вашу помощь! - person Fynn; 08.12.2012
comment
Вы хоть представляете, как два решения (использующие ALL или комбинацию шаблонов MATCH) различаются по производительности? - person Fynn; 08.12.2012
comment
Решение WHERE всегда предпочтительнее MATCH с точки зрения скорости. - person Andres; 08.12.2012