我有两组节点:
1) n1 -rel-> n2 -rel-> n3 -rel-> n4
2) n5 -rel-> n6 -rel-> n7
使用命令创建:
1) CREATE (n1 { id:'n1' })-[:rel]->(n2 {id:'n2' })-[:rel]->(n3 { id:'n3' })-[:rel]->(n4 {id:'n4'})
2) CREATE (n5 { id:'n5' })-[:rel]->(n6 {id:'n6' })-[:rel]->(n7 { id:'n7' })
什么是查询:
1)查找按组中存在的最长路径排序的节点组?
2)查找按组包含的节点数排序的节点组?
3)如果任何两个节点id找到连接它们的所有路径?
答案 0 :(得分:0)
即使指定开始和结束节点,寻路也可能是代价高昂的。如果您要在"所有节点"之间进行此操作,那就非常昂贵。
...然而
MATCH p = (n)-[*]-(m)
RETURN nodes(p)
ORDER BY length(p) DESC
鉴于您的评论如下,这可能有所帮助:
MATCH p = (n)-[*]-(m)
WHERE ALL(x IN nodes(p) | x.id IN [<id1>, ..., <id_x>])
AND m.id <> n.id
RETURN nodes(p)
ORDER BY length(p) DESC
MATCH p = (n {id: <id1>})-[*]-(m {id: <id2>})
RETURN p
但这些是可怕的,非常昂贵的查询,实际上,如果你使用它们,你会想要对返回的结果数量和节点/关系的最大深度施加限制。