2017-05-27 277 views
-3

我有2個屬性名稱爲A和B的節點。每個節點都有多個手機聯繫人保存。Neo4j如何建立關係

  • 用戶A在他接觸用戶C
  • 用戶B有用戶C在他接觸

    contacts

如何用戶C有關係,他KNOWS用戶連接A和B?

我必須合併用戶C的第一件事,而不是建立一個名爲KNOWS的關係。

回答

0

如何將用戶C與他知道用戶A和B的關係連接起來?

簡單地做:

MATCH(a {name:"A"}) // Match nodes with property name = "A" and store it in a variable 
MATCH(b {name:"B"}) // Match nodes with property name = "B" and store it in b variable 
MERGE (c {name:"C"}) // merge c (will be created if a node with name = "C does not exists yet") 
CREATE UNIQUE (c)-[:KNOWS]->(a) // Will create :KNOWS relationship from c to a if it not exists 
CREATE UNIQUE (c)-[:KNOWS]->(b) // Will create :KNOWS relationship from c to b if it not exists 
0

您還可以使用MERGE創建C和不曉關係中的一個步驟:

MATCH (a:user {name:'A'}) MERGE (c:user {name:'C'})-[:KNOWS]->(a); 

在這裏,你正在尋找一個:用戶具有屬性的節點名稱 ='A'。如果找到了,結果會傳遞給MERGE子句。您正在給MERGE一個完整的路徑; MERGE將創建不存在的部分路徑。在這種情況下,它將創建一個類型爲的節點:用戶並給它一個名稱屬性設置爲'C';它也會創建一個:從C到A的KNOWS關係。MERGE將使用已給出的現有節點a。通過這種方式,MERGE與CREATE不同,因爲CREATE會嘗試創建所有內容,包括新節點a。

如果您還有其他的屬性來設置你的節點C,你可以使用上創建子條款,同時設置這些屬性:

MATCH (a:user {name:'A'}) MERGE (c:user {name:'C'})-[:KNOWS]->(a) ON CREATE SET c={name:'C', phone:'+1 234 5678'};