给出如下查询:
START n = node(123)
MATCH p = n-[r:LIKES*..3]->x
RETURN p;
上面的查询得到的结果路径包含循环。
我怎样才能返回简单的路径?
鉴于此example:
答案 0 :(得分:16)
指定路径的唯一性是密码的计划特征。
所以现在我们必须确定路径中没有任何节点是重复的。
对于集合的所有元素(路径都是),必须有一个ALL
谓词。
使用filter
,您可以提取集合的元素,因为某个条件成立。
START neo=node(1)
MATCH path= neo-[r:KNOWS*..4]->other
WHERE ALL(n in nodes(path) where
1=length(filter(m in nodes(path) : m=n)))
RETURN neo, LENGTH(path) AS length, EXTRACT(p in NODES(path) : p.name), other
ORDER BY length
所以我做的是:
n
n
length
ALL
每个n
答案 1 :(得分:3)
我的解决方法:
START n = node(123), x=node(*)
MATCH p = shortestPath(n-[r:LIKES*..3]->x)
RETURN p;
参见示例in console
答案 2 :(得分:2)
在2.3.0中,使用以下内容:
MATCH path = (start {id:2})<-[*1..]-(end {id:3})
WHERE ALL(n in nodes(path) where
1 = size(filter(m in nodes(path) where m=n)))
RETURN start, LENGTH(path) AS length, EXTRACT(p in NODES(path) | p.id), end
ORDER BY length