删除关系,然后添加回到节点neo4j



我想获得一个节点,删除某个类型的所有传出关系,然后添加返回关系。

我遇到的问题是,一旦我抓住了节点,它仍然可以维持其以前的关系,因此删除后,它不再有1次将其加倍。1-> 2-> 4-> 8等

示例图:

CREATE (a:Basic {name:'a'})
CREATE (b:Basic {name:'b'})
CREATE (c:Basic {name:'c'})
CREATE (a)-[:TO]->(b)
CREATE (a)-[:SO]->(c)

删除先前关系然后添加新关系的查询。(这只是一个简短的示例,实际上它不会添加相同的关系,但是更多的可能将其指向另一个节点)。

MATCH (a:Basic {name:'a'})
WITH a
OPTIONAL MATCH (a)-[r:TO|SO]->()
DELETE r
WITH a
MATCH (b:Basic {name:'b'})
CREATE (a)-[:TO]->(b)
WITH a
MATCH (c:Basic {name:'c'})
CREATE (a)-[:SO]->(c) 

如果将创建更改为合并,则可以解决问题,但是当我知道我只是删除了所有关系时,必须合并感到很奇怪。是否有一种方法可以在查询中途更新" A",以反映更改?我想将其保留在一个查询中

您观察到的行为是由于可选的MATCH子句生成了2行数据的微妙事实,这导致所有后续操作都进行了两次。

迫使DELETE子句之后只有一行数据,您可以在DELETE子句之后使用WITH DISTINCT a(而不是WITH a),因此可以:

MATCH (a:Basic {name:'a'})
OPTIONAL MATCH (a)-[r:TO|SO]->()
DELETE r
WITH DISTINCT a
MATCH (b:Basic {name:'b'})
CREATE (a)-[:TO]->(b)
WITH a
MATCH (c:Basic {name:'c'})
CREATE (a)-[:SO]->(c) 

最新更新