我在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。
请帮我解决这个问题,。
答案 0 :(得分:1)
(已编辑。通过n
查找START n=node(8)
会导致其他变量出现问题。因此,我们在n
语句中找到MATCH
。
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
如果有多个&#34;最亲密的朋友&#34;,则返回其中一个。
此外,shortestPath()
函数不支持最小路径长度 - 所以&#34; 1..2&#34;已成为&#34; .. 2&#34;,并且WHERE子句需要指定length(p) > 0
。