Neo4j Cypher Рекурсивный ход до определенного узла - PullRequest
0 голосов
/ 12 марта 2019

Я пытаюсь создать рекурсивный запрос, который будет запускаться с определенного узла, но хочет остановить рекурсию, когда он достигнет определенного узла.

Например

  (node{Id:1})-[Parent]->(node{Id:2})
    (node{Id:2})-[Parent]->(node{Id:3})
    (node{Id:3})-[Parent]->(node{Id:4})
....
....
(node{Id:99})-[Parent]->(node{Id:100})

Теперь я хочу перейти от узла 3 к узлу 8.

Я пробовал запрос ниже, но он переходит от узла 3 к корневому узлу (то есть узлу 100).

match  (c:node{Id:3})-[Parent*0..]->(p:node) retun p;

Как я могу поставить здесь условие, чтобы остановить прохождение, когда я достигну узла 8?

1 Ответ

1 голос
/ 12 марта 2019

Вы также можете добавить параметр Id в предложении Match ко второму узлу (здесь p).

MATCH path=(c:node{Id:3})-[Parent*0..]->(p:node{Id:8}) RETURN path;

Вы также можете добавить глубину в соответствие отношений как [Parent*0..N] Если вы знаете точное или максимальное значение N.

EDIT: Выше запрос возвращает путь от узла 3 до 8. Если вы ищете только узлы на пути от узла 3 до 8, вы можете сопоставить путь и вернуть узлы, присутствующие на этом пути.

MATCH path=(c:node{Id:3})-[Parent*0..]->(p:node{Id:8}) RETURN nodes(path);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...