可选择在 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 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']
我正在尝试构建一个 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 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']