仅将路径超过一个(冗余)的节点返回到Neo4j(Cypher)中的不同节点

时间:2019-03-21 13:14:44

标签: neo4j cypher

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

这是使用使用Neo4j db的BloodHoundAD的示例。

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

  

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

如何以仅显示冗余路径的方式对此进行查询?

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

Graph with redundant paths circled in red

1 个答案:

答案 0 :(得分: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