使用Cypher识别图中的周期(包含2个节点,3个节点... n个节点)

时间:2019-07-10 08:22:50

标签: neo4j cypher

我想确定图中的所有循环。我想要一些查询,它会给我2个节点之间的周期,另一个查询会给我3个节点之间的周期...直到n个节点。

我尝试了一些查询,但是我不知道如何仅显示2个节点的循环,然后仅显示3个节点的循环。相反,我可以显示所有周期。

MATCH
  (m1:Disease)-[]->(m2:Disease),
  cyclePath=shortestPath((m2)-[*1..10]->(m1))
WITH
  m1, nodes(cyclePath) as cycle
WHERE id(m1) = apoc.coll.max([node in cycle | id(node)])
RETURN m1.id, cycle ;

我希望有更多的查询,这些查询只会给我2个节点的周期,然后是3个节点... n个节点(直到确定了最大周期)。

1 个答案:

答案 0 :(得分:2)

这是获取长度为2的所有循环的一种非常简单的方法:

MATCH p=(m1:Disease)-[*2]->(m1)
RETURN NODES(p) AS cycle

要获取其他长度的循环,只需将查询中的2替换为所需的长度。

注意:此查询可以多次返回相同的节点循环,但具有不同的开始/结束节点。例如1-> 2-> 1和2-> 1-> 2。