Neo4j cypher查询:如何使用深度值获取两个深度的唯一节点

时间:2014-09-17 07:34:59

标签: 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。

请帮我解决这个问题,。

1 个答案:

答案 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