可以选择在Neo4J中创建关系

可以选择在Neo4J中创建关系,neo4j,cypher,Neo4j,Cypher,我正在尝试构建一个Cypher查询,该查询将演员连接到电影,或者使用relationship属性的新值更新现有关系。我在想这样的事情: 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中的示例中的演员和

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

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
;如果关系不存在,我如何创建新的关系

您想使用
合并
,如果模式不存在,它会创建一个模式,否则会被检索:

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']
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']
您还应该在创建集上执行
,在匹配集
上执行
,这将允许您根据创建或检索的模式执行不同的操作:

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']
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']

这里有些狡猾的东西!不知道我们可以在不同的情况下采取不同的行动!谢谢你,妮可,很有魅力:)