MATCH (a {name:"Federico"})-[r1]-(b)-[r2]-(c)-[r3]-(d)
WITH r3, [startNode(r3), endNode(r3)] as ns
DELETE r3
WITH [n IN ns WHERE NOT n--()] as orphans
FOREACH (n IN orphans | DELETE n)
如果您想一次删除多个关系,可以尝试将模式绑定为路径
MATCH path=(a {name:"Federico"})-[r1]-(b)-[r2]-(c)-[r3]-(d)
然后你删除了一些关系之后,
DELETE r1, r3
你可以过滤路径中的所有节点并删除上面的孤立节点
WITH [n IN nodes(path) WHERE NOT n--()] as orphans
FOREACH (n IN orphans | DELETE n)
MATCH (a)-[r1]-(b)-[r2]-(c)-[r3]-(d)
WITH r3, startNode(r3) AS sR, endNode(r3) AS eR
DELETE r3
WITH sR,eR
MATCH n
WHERE n IN [sR,eR] AND NOT n--()
DELETE n
2条答案
按热度按时间vwoqyblh1#
如果要删除关系及其孤立节点,请尝试首先获取要删除的关系的开始节点和结束节点,删除关系,然后测试节点是否“孤立”并有条件地删除它们。您可以通过将开始/结束节点放入集合中,在
NOT n--()
上将集合作为 predicate 进行过滤,然后在FOREACH
循环中删除过滤后的集合中的节点来完成此操作。如果您想一次删除多个关系,可以尝试将模式绑定为路径
然后你删除了一些关系之后,
你可以过滤路径中的所有节点并删除上面的孤立节点
只要您删除的关系在路径中,它们留下的任何孤立节点也将被删除。
(我现在无法测试这些查询,但我认为我的语法是正确的。
qlvxas9a2#
因此,简而言之,您正在尝试删除图中任何没有任何关系的孤立节点。
以上操作将删除关系r3删除后孤立的所有节点