fer*_*teh 6 path-finding neo4j cypher
我想编写一个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
Run Code Online (Sandbox Code Playgroud)
它返回3个1,2和3长度的路径,不仅是最长的路径,我的查询应该只找到最长的路径,我的意思是如果有8个路径适合我的第一个where条件(where rel.status='on'),长度为1, 2,3,3,4,6,6,6,只返回长度为6的三条路径.
我该怎么办?
请指导我,我是neo4j的新手,并尝试过很多但除了头晕之外没有任何东西,我会非常感谢你的帮助.
jja*_*erg 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4978 次 |
| 最近记录: |