Вернуть только узлы с более чем одним (избыточным) путем к различным узлам в Neo4j (Cypher) - PullRequest
0 голосов
/ 21 марта 2019

Я хотел бы написать запрос, который возвращает только узлы, которые имеют более одного пути к другому узлу. (показывать только избыточные пути к любому другому узлу / Показывать только циклы подграфа) * ​​1001 *

Это пример использования BloodHoundAD, который использует Neo4j db.

Этот запрос, например, возвращает все пути от пользователей, которые имеют вложенные отношения MemberOf, к группам.

MATCH p = (u: Пользователь) - [r: MemberOf * 4..8] -> (g: Group) RETURN p

Как я могу запросить это таким образом, чтобы показать только избыточные пути?

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

График с избыточными путями, обведенными красным

1 Ответ

0 голосов
/ 21 марта 2019

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

MATCH p=(u:User)-[:MemberOf*4..8]->(g:Group) 
WITH u, g, collect(p) as paths
WHERE size(paths) > 1
RETURN u, g, paths
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...