如何用Cypher统计两节点间忽略关系类型的唯一路径数量
统计忽略关系类型的唯一节点路径数量
你的问题核心是要忽略关系类型,只按节点序列统计唯一路径,当前查询会把相同节点序列但不同关系的路径重复计数,只需提取路径中的节点列表并去重即可解决。
修正后的查询语句
MATCH p=(a)-[*1..2]-(b) WHERE ID(a) = 123 // 替换为node1的实际数字ID,注意ID()返回的是数字而非字符串 AND ID(b) = 456 // 替换为node2的实际数字ID WITH DISTINCT nodes(p) AS uniqueNodeSequence RETURN COUNT(uniqueNodeSequence) AS uniquePathCount
原理说明
nodes(p)会提取路径p中的所有节点,生成一个节点列表(比如你的例子中,三个路径的节点列表都是[node1, node3, node2])DISTINCT会对这些节点列表去重,只要节点序列和顺序一致,不管中间关系类型如何,都会被视为同一条路径- 最后对去重后的节点列表计数,就是你需要的唯一路径数量
注意事项
如果你的"node1"、"node2"是节点的属性(比如name属性)而非ID,需要把条件改成:
WHERE a.name = "node1" AND b.name = "node2"
内容的提问来源于stack exchange,提问作者xygonyx
相关产品推荐
相关产品推荐

