2017-03-27 75 views
2

我正在開發一個系統,允許用戶隱藏他們對話中的消息。目前,系統的設計使消息作爲(發件人) - [] - >(收件人)用戶之間的關係存儲。Neo4j - 根據關係方向設置不同的屬性

我遇到的問題是,我希望任何一個用戶都能夠將消息隱藏在他們的身邊。我試圖開發代碼,以便調用相同的函數,而不管用戶是隱藏它的是發件人還是收件人,但在set語句中使用條件邏輯時遇到困難。

我目前的嘗試如下所示。

任何意見,將不勝感激

感謝

MATCH (userLoggedIn :User {EmailAddress:'email'}) 
MATCH (userLoggedIn)-[r:USER_SENTMESSAGE]-(otherUser) 
WHERE r.Id = '123456' 
SET 
    case when (userLoggedIn)-[r]->(otherUser) 
    then r.HideFromSender = true 
    else r.HideFromReceiver = true 
    end 

回答

3

你需要結合startNode(對於GET方向)和conditional statement(用於設置屬性):

MATCH (userLoggedIn:User {EmailAddress:'email'}) 
     -[r:USER_SENTMESSAGE {Id: '123456'}]- 
     (otherUser) 
WITH userLoggedIn, r, otherUser 
FOREACH (ift in CASE WHEN userLoggedIn = startNode(r) THEN [1] ELSE [] END | 
    SET r.HideFromSender = true 
) 
FOREACH (ift in CASE WHEN otherUser = startNode(r) THEN [1] ELSE [] END | 
    SET r.HideFromReceiver = true 
) 

UPD:事實上,從邏輯上講,您可以更輕鬆:

MATCH (userLoggedIn:User {EmailAddress:'email'}) 
     -[r:USER_SENTMESSAGE {Id: '123456'}]- 
     (otherUser) 
WITH userLoggedIn, r, 
    CASE WHEN userLoggedIn = startNode(r) THEN true ELSE false END as ift 
SET r.HideFromSender = ift, 
    r.HideFromReceiver = NOT ift 
+0

完美地工作!非常感謝。用這一個敲我的頭在牆上 –

+1

@GavinHolyday看到加法 –

相關問題