2017-04-07 248 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/ –