首页 文章

如何使用密码查询找到所有最长的路径?

提问于
浏览
6

我想编写一个cypher查询,它查找节点中与STATUS =“on”属性相互关系的所有最长路径,这是我到目前为止所做的:

start n=node(*) 
match p = n-[r:INCLUDE*..]->m 

with n,MAX(length(p)) as l 
match p = n-[r:INCLUDE*..]->m 
WHERE all(rel in r 
 where rel.status='on' AND (length(p) = l) )
return p,l

它返回3条1,2和3长度的路径,不仅是最长的路径,我的查询应该只找到最长的路径,我的意思是如果有8条路径适合我的第一个条件( where rel.status='on' ),长度为1 ,2,3,3,4,6,6,6,只返回长度为6的三条路径 .

我该怎么办?

请指导我,我是neo4j的新手,并尝试过很多但除了头晕之外没有任何东西,我会非常感谢你的帮助 .

1 回答

  • 12

    尝试将关系属性标准向上移动到第一个路径匹配,或者'll be calculating the max length on paths that are not filtered with that criterion. Then carry the paths and the max length into the second leg of the query so you don't必须再次匹配所有路径 . 您可以在 WITH 子句中收集携带它们的路径,然后在返回时过滤路径长度 . 尝试类似的东西

    START n=node(*)
    MATCH p=n-[rels:INCLUDE*]->m 
    WHERE ALL (rel IN rels 
      WHERE rel.status='on') 
    WITH COLLECT(p) AS paths, MAX(length(p)) AS maxLength 
    RETURN FILTER(path IN paths 
      WHERE length(path)= maxLength) AS longestPaths
    

相关问题