2015-05-13 18 views
0

我想創建到列表中的所有ID的朋友關係,但我得到一個錯誤創建循環關係:如何在Neo4j的

Node already exists with label User and property "id"=[2] 
Neo.ClientError.Schema.ConstraintViolation 

基本上這些ID已經存在,我只是想創建朋友關係一次使用for-each多個ID。我可以如何做到這一點,或有任何其他方式做同樣的事情?我非常感謝任何幫助。

MATCH (u:User {id:"3"}) 
FOREACH (id in ["2","4","5"] | 
    MERGE (u)-[:FRIEND]->(:User {id:id})) 

回答

2

的問題是合併使用。合併需要你綁定關係的兩端,如果你不想在沒有它們之間存在的模式的情況下重新創建節點。 u是綁定的,但是因爲從u到其他用戶沒有FRIEND關係,所以從u創建整個模式,使用FRIEND關係和新的用戶節點。

不能匹配FOREACH用戶因此而應使用

MATCH (u:User {id:"3"}) 
match (fb:User) 
where fb.id in ["2","4","5"] 
MERGE (u)-[:FRIEND]->(fb) 
+0

如何如果這些ID不在我的數據庫上,我可以以同樣的方式創建新的ID嗎? – jason

+0

如果你想創建或匹配ID,這應該工作: MATCH(u:User {id:「3」}) 展開[「2」,「4」,「5」]作爲fbid 合併fb:User {id:fbid}) MERGE(u) - [:朋友] - >(fb) – Luanne

+0

請看看這個。感謝提前。 http://stackoverflow.com/questions/30208963/how-to-create-relationship-and-merge-create-new-node-in-loop-in-neo4j – jason

2

由於用戶已經存在,還有一個更簡單的方法:

MATCH (u:User {id:"3"}) 
MATCH (friends:User) WHERE friends.id IN ["2","4","5"] 
MERGE (u)-[:FRIEND]->(friends) 
+0

謝謝你真棒。 – jason

+0

請看看這個.Thanks in advance http://stackoverflow.com/questions/30208963/how-to-create-relationship-and-merge-create-new-node-in-loop-in-neo4j – jason