2017-04-07 45 views
0

我有一個MERGE查詢,其中我想合併一個節點(如果它存在或創建一個新節點,並且如果創建一個新節點,則創建一個新的關係鏈接新創建的節點,然後添加屬性的關係鏈接節點如何在MERGE ON CREATE SET查詢中添加新關係neo4j

這樣基本的東西:

MERGE (user:USER { userId : userId }) 
ON CREATE SET 
    user.password = password , 
    user.userID = userID , 
    (user)-[:INFO]->(userInfo:PROFILEINFO {firstname:'John',lastName:'Doe'}) 
RETURN user 

但我無法弄清楚如何創建一個新的關係,因爲這顯示了一個錯誤。

如果用戶輸入新信息或更新關係,或者如果用戶不存在並創建新用戶,然後創建關係,則需要更新userInfo。

+1

更新的關係是,如果usre是新創建的,你會建立同樣的關係?如果是這樣,那麼這種關係的合併是不是也一樣好?另外,還有什麼特別的理由讓姓和名保持在一個單獨的節點:USER? – InverseFalcon

+0

@InverseFalcon是的,我認爲在合併中創建關係會產生預期的效果。我會盡力回覆你。 此外,我分手,因爲我將爲每個用戶指定不同的信息節點,具有相同的關係,如:PROFILEINFO,:PRIVACYINFO,:SECURITYINFO和所有類型的:用戶的信息,所以我想打破東西,而不是全部在單個節點 我想這會產生不必要的節點。 –

+0

@InverseFalcon我應該遵循什麼結構?我是否將信息劃分到不同的節點或創建一個大型屬性對象,該對象包含該用戶的所有信息,包括配置文件,設置,隱私,帳戶等。 –

回答

3

您可以使用臨時屬性和foreach:

MERGE (user:USER { userId : userId }) 
ON CREATE SET 
    user.password = password , 
    user.userID = userID , 
    user.isCreated = [true] 
FOREACH(ifthen in user.isCreated | 
    MERGE (user)-[:INFO]->(userInfo:PROFILEINFO {firstname:'John',lastName:'Doe'}) 
    REMOVE user.isCreated 
) 
RETURN user 
+0

'ifthen in user.isCreated' does not understand this'ifthen'? –

+0

@raviyadav這是cypher的條件語句技巧 - http://www.markhneedham.com/blog/2014/06/17/neo4j-load-csv-handling-conditionals/ –