如何在neo4j的“创建集合时合并”查询中添加新关系

如何在neo4j的“创建集合时合并”查询中添加新关系,neo4j,Neo4j,我有一个合并查询,其中我希望合并一个节点(如果存在)或创建一个新节点,如果创建了一个新节点,则创建一个链接到新创建的节点的新关系,并向关系链接节点添加属性 基本上是这样的: MERGE ( user:USER { userId : userId } ) ON CREATE SET user.password = password , user.userID = userID , (user)-[:INFO]->(userInfo:PROFILEINFO {fir

我有一个合并查询,其中我希望合并一个节点(如果存在)或创建一个新节点,如果创建了一个新节点,则创建一个链接到新创建的节点的新关系,并向关系链接节点添加属性

基本上是这样的:

MERGE ( user:USER { userId : userId } ) 
ON CREATE SET 
    user.password = password ,
    user.userID = userID ,
    (user)-[:INFO]->(userInfo:PROFILEINFO {firstname:'John',lastName:'Doe'})
RETURN user
然而,我不知道如何创建一个新的关系,因为这显示了一个错误


如果用户输入新信息,我需要更新用户信息;如果用户不存在,我需要更新关系;如果用户不存在,我需要创建新用户,然后再创建关系。

您可以使用临时属性和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

要更新的关系是否与刚创建usre时创建的关系相同?如果是这样的话,这种关系的合并难道不是同样有效吗?另外,有没有什么特别的理由将名字和姓氏与:USER分开保存在一个单独的节点上?@InverseFalcon是的,我认为在合并中创建一个关系会产生预期的效果。我会试着给你回复。我还划分了它,因为我将为每个具有相同关系的用户指定不同的信息节点,如:PROFILEINFO,:PRIVACYINFO,:SECURITYINFO和all都是用户的:INFO类型,所以我想把它们分开,而不是全部放在一个节点中。我想这确实会创建不必要的节点。@InverseFalcon我应该遵循什么结构?我是将信息划分到不同的节点中,还是创建一个大的属性对象来保存该用户的所有信息。包括配置文件、设置、隐私、帐户等对您的用例和查询的依赖,以及数据的建模方式。将设置、隐私和帐户数据分开是有意义的,因为除了用户节点本身之外,您不太可能在这些节点之间进行查询。不过,您可能需要考虑将:USER和:PROFILEINFO节点分开的含义。如果几乎每个涉及用户的常见查询也包括获取其:PROFILEINFO,那么可以使用一个节点而不是两个节点,或者至少将常用访问的数据移动到同一个节点(例如,名称属性和用户ID)。@InverseFalcon关系的合并非常有效,谢谢
ifthen在user.isCreated
中不理解这一点
ifthen
?@raviyadav这是cypher中的条件语句技巧-