neo4j 删除桥接节点后链接未连接的组件

pdkcd3nj  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(175)

我使用Neo4j来表示网络。
在我的用例中,当我删除一个连接两个或更多图形组件的节点时,我希望添加一条边以确保组件仍然连接。
例如,如果我有下面的图表:

A - B - D
    |
    C

节点BACD之间的桥,如果我删除它,这些组件将断开连接。因此,删除B后,我希望得到如下结果:

A - D     or     A - D
    |            |
    C            C

或者确保剩余组件仍然以某种方式连接的任何其他组合。
我正在努力编写一个Cypher查询来实现这个规范,并且还没有能够在网上找到解决方案。想知道我是否可以在这里找到一些帮助!
注意:在我的系统中,边被视为无向的(这就是为什么我在上图中没有使用箭头)。

ws51t4hk

ws51t4hk1#

您可以选择性地比对已连接的节点,并在删除节点B后连接这些节点。
以下查询不会产生您需要的确切结果,但它会保持节点连接。

MATCH (b:node{name: 'b'})
OPTIONAL MATCH (n1)--(b)--(n2)
DETACH DELETE b
WITH n1, n2 WHERE n2 IS NOT NULL AND n1 IS NOT NULL 
MERGE (n1)-[:CONNECTED]-(n2)

说明:

第1行-〉查找b节点
第2行-〉查找相关节点(n1 & n2)
第3行-〉删除节点
第4行-〉检查n1和n2不为空,否则密码将抛出错误
第5行-〉使用MERGE添加关系,它将仅在节点尚未连接时创建关系。
1.OPTIONAL MATCH是必需的,否则它将不会删除未连接到任何节点的B节点。
1.当n1或n2为NULL时,需要NULL检查(n2不为NULL且n1不为NULL)以避免错误。

相关问题