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

Neo4j 如何使用密码查询查找所有最长路径?,neo4j,cypher,path-finding,Neo4j,Cypher,Path Finding,我想编写一个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

我想编写一个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条件(
where rel.status='on'
),长度为1,2,3,3,4,6,6,6,那么只应返回长度为6的三条路径

我该怎么办


请指导我,我是neo4j新手,尝试了很多,但除了头晕之外什么都没有,我将非常感谢您的帮助。

尝试将您的关系属性标准上移到第一个路径匹配,否则您将计算未使用该标准筛选的路径的最大长度。然后将路径和最大长度放入查询的第二段,这样就不必再次匹配所有路径。您可以在
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

我应该如何获得路径的最后一个节点?