给定以下查询:
START n = node(123)
MATCH p = n-[r:LIKES*..3]->x
RETURN p;
我使用上述查询得到的结果路径包含循环。
如何仅返回简单路径?
考虑以下示例:
- 我该如何避免出现重复节点的路径,例如:[Neo,Morpheus,Trinity,Morpheus,Neo]?
给定以下查询:
START n = node(123)
MATCH p = n-[r:LIKES*..3]->x
RETURN p;
我使用上述查询得到的结果路径包含循环。
如何仅返回简单路径?
考虑以下示例:
指定路径的唯一性是Cypher计划中的一个功能。
因此,现在我们必须确定路径中没有重复的节点。
有一个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
相等的节点长度
ALL
断言每个n
必须为1filter(m in nodes(path) WHERE m=n))
。 - Daniel Olszewskicreate (n:ent {id:'a'})-[:rel]->(:ent {id:'b'})-[:rel]->(o:ent {id:'c'})-[:rel]->(p:ent {id:'d'})-[:rel]->(:ent {id:'e'})-[:rel]->(n),(p)-[:rel]->(o)
,查询 MATCH path=(ent{id:'a'})-[:rel*0..]->(ent) WHERE ALL(n in nodes(path) WHERE 1=length(filter(m in nodes(path)WHERE m=n))) RETURN path
出现了 key not found: UNNAMED25
错误! - Mahesha999START n = node(123), x=node(*)
MATCH p = shortestPath(n-[r:LIKES*..3]->x)
RETURN p;
see the example in console
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