(可选)在Neo4J中创建关系

时间:2015-04-06 20:31:16

标签: neo4j cypher

我正在尝试构建一个Cypher查询,它将一个actor连接到电影,或者用关系属性的新值更新现有关系。我想到这样的事情:

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.roles存在,如何更新r,如果不存在,则如何创建新关系?

1 个答案:

答案 0 :(得分:2)

您想使用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']