获取节点的邻居但尊重关系的方向

时间:2015-11-03 03:31:30

标签: neo4j cypher

例如,我使用this site

假设我们想知道Morpheus知道谁,但我们想要保持关系的方向。我希望a成为“来自”,b成为“来”

这会返回所有三个关系,但方向会丢失:

MATCH (a { name:"Morpheus" })-[]-(b:Crew) RETURN a, b

此外,Morpheus总是a ...... doh。

2是让Morpheus为ab

MATCH (a:Crew)-[]-(b:Crew) WHERE a.name="Morpheus" OR b.name="Morpheus"
RETURN a, b

返回的行数是我预期的两倍。显然,[]关系的匹配非常自由。

经过一些洞察,我意识到我专注于错误的事情:

MATCH ({ name:"Morpheus" })-[r:KNOWS]-()
RETURN startnode(r) AS a, endnode(r) AS b 

这就是诀窍。返回3行,关系方向得到尊重。

我对在该查询中根本没有命名节点感到有点奇怪。感觉就像我在乱砍。但话说回来,将节点连接在一起就是关系的用途。有什么其他方法可以做同样的事情?

1 个答案:

答案 0 :(得分:2)

您应该能够将这两种方法结合起来:

MATCH (knower:Crew)-[:KNOWS]->(knowee:Crew)
WHERE knower.name="Morpheus" OR knowee.name="Morpheus"
RETURN knower, knowee