6

我想编写一个密码查询来查找与 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的新手,尝试了很多,但除了头晕什么都没有,我会非常感谢你的帮助。

4

1 回答 1

12

尝试将您的关系属性标准提升到第一个路径匹配,否则您将计算未使用该标准过滤的路径的最大长度。然后将路径和最大长度带入查询的第二段,这样您就不必再次匹配所有路径。您可以收集路径以在子句中携带它们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
于 2013-11-04T10:35:33.067 回答