Neo4j - 根据关系方向设置不同的属性

时间:2017-03-27 15:03:46

标签: neo4j cypher

我正在开发一个系统,允许用户隐藏对话中的消息。目前,系统的设计使得消息存储为用户之间的关系,指向(发件人) - [] - >(收件人)。

我遇到的问题是,我希望任何一个用户都能够隐藏在他们一边的消息。我正在尝试开发代码,以便调用相同的函数,无论隐藏它的用户是发件人还是收件人,但在set语句中使用条件逻辑时遇到问题。

我目前的尝试如下所示。

任何建议都将不胜感激

由于

// data.h
class data {
public:
  string a;
  double b;
  uint8_t c;
} /* including ";"?? */

1 个答案:

答案 0 :(得分:3)

您需要合并startNode(用于获取方向)和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 
)

更新。事实上,从逻辑上讲,您可以更轻松:

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