Искать все пути между двумя узлами, кроме одного типа узла - PullRequest
0 голосов
/ 29 декабря 2018

Я пытаюсь нарисовать график со всеми соединениями (путями) между двумя узлами, кроме путей с узлом определенного типа.

Например, я ищу пути между A и B, за исключением соединения через узел типа X.

Так что в результате я хочу получить все пути от A до B, кроме этого через узелтип X, например A -> C (тип, отличный от X) -> B - нормально, A -> D (тип X) -> B не хорошо.

Конечно, число узлов в путях может быть> 2.

Я написал что-то подобное, но я не знаю, как этого добиться

MATCH (p1:Person {name:'Brad Pitt'}), (p2:Person {name:'Tom Hanks'}), 
paths=allShortestPaths((p1)-[*]-(p2))
UNWIND nodes(paths) as rel
RETURN paths, collect(distinct labels(rel)) as types

1 Ответ

0 голосов
/ 29 декабря 2018

Для этого вам понадобится переменная пути, и вы будете использовать предикат none(), чтобы убедиться, что ни один из узлов в пути не имеет типа, который вы хотите исключить.

Чтобы использовать ваш пример, если у нас есть: Director узлы, и вы хотите исключить пути с этими узлами, вы можете сделать это следующим образом:

MATCH (p1:Person {name:'Brad Pitt'}), (p2:Person {name:'Tom Hanks'}), 
path=allShortestPaths((p1)-[*]-(p2))
WHERE none(node in nodes(path) WHERE node:Director)
RETURN path
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...