Neo4j密码查询:如何获得两个深度的唯一节点及其深度值



我在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

相关内容

最新更新