2015-04-06 102 views
0

我在嘗試構建一個將演員連接到影片的Cypher查詢,或者用關係屬性的新值更新現有關係。我想的是這樣的:(可選)在Neo4J中創建關係

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,或者如果不存在關係r

回答

1

你想用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 outON 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'] 
+0

一些光滑的東西在這裏!不知道我們可以在不同情況下采取不同的行動!感謝妮可,像一個魅力:) –