Neo4J Cypher v2查找节点和可能存在或不存在的关系,返回两者

时间:2016-08-03 01:02:33

标签: optimization neo4j cypher

我有两个用户:

CREATE (a:user {id: 1})
CREATE (b:user {id: 2})

用户可以互相关注:

MATCH (a:user {id: 1}), (b:user {id: 2})
CREATE (a)-[r:FOLLOWS]->(b)

为了通过网络保存多次往返,我想查找用户,以及其他用户是否在同一查询中跟踪他们:

MATCH (a:user {id: 1}), (b:user {id: 2}), (a)-[r:FOLLOWS]->(b)
RETURN a, b, r

但如果FOLLOWS关系不存在,我什么也得不回来。有没有办法总是返回用户并获得关系的NULL(如果它不存在?)

1 个答案:

答案 0 :(得分:2)

OPTIONAL MATCH将尝试匹配模式并为那些不存在的模式返回空值:

MATCH (a:user {id: 1}), (b:user {id: 2})
OPTIONAL MATCH (a)-[r:FOLLOWS]->(b)
RETURN a, b, r