我在neo4j 中使用Cyper查询
我的要求是,需要获得两个级别的唯一(朋友)和他们的最短深度值。
图形看起来像
a-[:frnd]->b, b-[:frnd]->a
b-[:frnd]->c, c-[:frnd]->b
c-[:frnd]->d, d-[:frnd]->c
a-[:frnd]->c, c-[:frnd]->a
我试过,
START n=node(8) match p=n-[:frnd*1..2]->(x) return x.email, length(p)
我的输出是
b 1 <--length(p)
a 2
c 2
c 1
d 2
a 2 and so on.
我需要的输出,
不应列出我的父节点(a)。
我只需要长度最短的(c)1
c与2不应重复。
请帮我解决这个问题,。
(已编辑。通过START n=node(8)
查找n
会导致以后其他变量出现问题。因此,下面我们在MATCH
语句中查找n
。)
MATCH p = shortestPath((n {email:"a"})-[:frnd*..2]->(x))
WHERE n <> x AND length(p) > 0
RETURN x.email, length(p)
ORDER BY length(p)
LIMIT 1
如果有多个"最亲密的朋友",则返回其中一个。
此外,shortestPath()
函数不支持最小路径长度,因此"1..2"变成了"..2",WHERE子句需要指定length(p) > 0
。