首页 > 解决方案 > 仅将具有多个(冗余)路径的节点返回到 Neo4j(Cypher)中的不同节点

问题描述

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

这是使用 Neo4j 数据库的 BloodHoundAD 的示例。

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

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

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

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

以红色圈出的冗余路径图

标签: neo4jcypher

解决方案


冗余路径意味着到同一个节点的路径不止一个,因此您将收集关于开始和结束节点的路径并过滤以保留列表中存在多个路径的行:

MATCH p=(u:User)-[:MemberOf*4..8]->(g:Group) 
WITH u, g, collect(p) as paths
WHERE size(paths) > 1
RETURN u, g, paths

推荐阅读