首页 > 解决方案 > 使用 Cypher 识别图中的循环(包含 2 个节点、3 个节点...n 个节点)

问题描述

我想确定图表中的所有周期。我想要一些查询,它会给我 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 个节点(直到确定最大周期)。

标签: neo4jcypher

解决方案


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

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

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

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


推荐阅读