我正在尝试构建一个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
,如果不存在,则如何创建新关系?
答案 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 SET
和ON 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']