可选择在 Neo4J 中创建关系

Optionally create relationship in Neo4J

我正在尝试构建一个 Cypher 查询,它将演员与电影联系起来,或者用关系的新值更新现有关系 属性。我在想这样的事情:

MATCH (actor:Person{name:"Tom Hanks"})
MATCH (movie:Movie{title:"Cloud Atlas"})
OPTIONAL MATCH (actor)-[r:ACTED_IN]->(movie)
SET r.roles = ['Role 1', 'Role 2']

这适用于来自 Neo4j 中的示例并且已经连接的演员和电影,但当我尝试创建新关系时则不行,因为 r 为空且无法更新。

那么,如果关系 r 存在,我如何更新 r.roles 或如果关系不存在,我如何创建新关系?

您想使用 MERGE,如果不存在则创建模式,否则检索:

MATCH (actor:Person{name:"Tom Hanks"})
MATCH (movie:Movie{title:"Cloud Atlas"})
MERGE (actor)-[r:ACTED_IN]->(movie)
SET r.roles = ['Role 1', 'Role 2']

您还应该 check out ON CREATE SETON MATCH SET,这将允许您根据模式是创建还是检索来执行不同的操作:

MATCH (actor:Person{name:"Tom Hanks"})
MATCH (movie:Movie{title:"Cloud Atlas"})
MERGE (actor)-[r:ACTED_IN]->(movie)
    ON MATCH SET r.roles = ['Role 1', 'Role 2']
    ON CREATE SET r.roles = ['Role 3', 'Role 4']