仅返回具有多个(冗余)路径的节点到Neo4j(Cypher)中的不同节点

问题描述 投票:0回答:1

我想编写一个查询,只返回具有多个路径到另一个节点的节点。 (仅显示指向任何其他节点的冗余路径/仅显示循环的子图)

这是使用使用Neo4j数据库的BloodHoundAD的一个例子。

例如,此查询将返回与具有嵌套“MemberOf”关系的用户的所有路径。

MATCH p =(u:User) - [r:MemberOf * 4..8] - >(g:Group)RETURN p

我怎么能以只显示冗余路径的方式查询?

为了说明这一点,我附上了一张图片。在这里,我想丢弃用蓝色圈出的路径,只显示冗余路径(用红色圈出)

Graph with redundant paths circled in red

neo4j cypher
1个回答
0
投票

冗余路径意味着同一节点有多条路径,因此您将收集相对于起始节点和结束节点的路径,并过滤以保留列表中有多个路径的行:

MATCH p=(u:User)-[:MemberOf*4..8]->(g:Group) 
WITH u, g, collect(p) as paths
WHERE size(paths) > 1
RETURN u, g, paths
© www.soinside.com 2019 - 2024. All rights reserved.