Neo4j найти не полный путь до конца - PullRequest
1 голос
/ 14 октября 2019

Например, у меня есть такие отношения:

A-> B {param1} -> C-> D-> E

A-> B {param2} ->C

A-> B {param1} -> C-> D

A-> B {param2} -> C-> E

A-> B {param1} -> C-> D

A-> B {param2} -> C-> D-> E

Мне нужен запрос Cypher, чтобы найти все узлы с полным путемот начального узла до конечного узла, где B {param2}, ожидаемый результат:

A-> B {param2} -> C

A-> B {param2} -> C-> E

A-> B {param2} -> C-> D-> E

Я нашел этот путь, но любой другой?

MATCH path=((n:B)-[*0..]-())
WHERE n.param2 = "value2"
RETURN nodes(path) as nodes_

Спасибо тебе за помощь.

Ответы [ 2 ]

0 голосов
/ 14 октября 2019

Чтобы найти узлы во всех полных путях, которые начинаются на определенных B узлах и имеют только внешние связи:

MATCH path=(n:B)-[*0..]->(m)
WHERE n.param2 <> "value2" AND NOT EXISTS((m)-->())
RETURN NODES(path) AS nodes_
0 голосов
/ 14 октября 2019

Вы можете использовать nodes(path)[1], чтобы получить второй узел на пути.

MATCH path=((:A)-[*0..]-())
WHERE NOT nodes(path)[1].param2 = "value2"
RETURN nodes(path) as nodes_

Два предостережения относительно запроса.

  1. В зависимости от количества :A узловВы можете ограничить количество начальных узлов. Например, при поиске некоторых свойств lookup
  2. Вы должны ограничить длину пути, например, [*0..10] для максимальных 10 прыжков
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...