' UPSERT'为了关系

时间:2014-04-30 14:40:11

标签: neo4j cypher

使用cypher,我想在两个节点(nodeA和nodeC)之间创建一个关系。

首先,我必须检查关系(nodeA:OWNS nodeC)是否存在。如果没有我要删除的关系:OWNS关系nodeA可能与其他节点有关 (例如,nodeA:OWNS nodeB)并创建:nodeA和nodeC之间的OWNS。

我是否有一种有效的方式让我用Cypher做到这一点?

谢谢。

编辑:我已经接受了答案但是快了..如果nodeA有多个[:OWNS]关系,通过为nodeB提供特定的id,它只会从nodeB中删除[:OWNS]并交换它与nodeC,对吗?

1 个答案:

答案 0 :(得分:4)

我认为Cypher不会让你为MERGE的“ON CREATE”和“ON MATCH”做任何有趣的事情。

一种方法可能是在单独的Cypher查询中执行此操作。

但是,这也可以解决问题:

MATCH (nodeA {id: <nodeA_id>})-[r:OWNS]->(nodeB), (nodeC {id: <nodeC_id>})
WHERE (nodeB) <> (nodeC)
MERGE (nodeA)-[:OWNS]->(nodeC)
DELETE r

并且,如果可能的话,尝试使用标签来识别您的节点,例如NodeA上:用户。这将大大加快速度。

请告诉我们这是否适合您。

HTH