我正在使用像
这样的查询MATCH p=((:Start)-[:NEXT*..100]->(n))
WHERE ALL(node IN nodes(p) WHERE ...)
WITH DISTINCT n WHERE (n:RELEVANT)
...
RETURN n.someprop;
我希望通过-[:NEXT]->
关系的方向产生自然排序的结果。
但是第三行中的WITH
扰乱了这种排序。问题是,我需要使用with到1.过滤:RELEVANT
节点和2.只获得不同的节点。
有没有办法保留订购?也许在路径上分配数字排序并稍后在ORDER BY
重复使用?不知道怎么做。
答案 0 :(得分:2)
您要求使用不同的节点,这表明该节点可能可以通过多个路径到达,因此可能存在于距起始节点多个距离处。
您应该在每个min()
的路径长度上使用max()
(或n
,具体取决于您的要求),而不是使用DISTINCT。由于这些是聚合函数,因此每个n
只能获得一行。
MATCH p=((:Start)-[:NEXT*..100]->(n:RELEVANT))
WHERE ALL(node IN nodes(p) WHERE ...)
WITH n, min(length(p)) as distance
WITH n
ORDER BY distance
...
RETURN n.someprop;
答案 1 :(得分:1)
如果您从WHERE
移除WITH
条款并将标记:RELEVANT
放在MATCH
中?也许WHERE
导致了问题......试试这个:
MATCH p=((:Start)-[:NEXT*..100]->(n:RELEVANT))
WHERE ALL(node IN nodes(p) WHERE ...)
WITH DISTINCT n
...
RETURN n.someprop;