用一个包含被替换节点标签的 Realtionship 替换一个 Relationship-Node->Relationship 结构

问题描述

我有一个图表,如果有以下结构:

(a)-[b:Input]->(c:Data)-[e:Output]->(f)

我想用与来自 c 的标签的关系替换 b,c,e:

(a)-[n:Data]->(f)

标签应该是自动生成的。我有多个 c 标签,例如:Data、AMC、Door、New_HS 等。 所以新创建的关系的标签应该是这样创建的:

[n:title = c.Label]

解决方法

我们不能基于属性创建关系。您需要创建一个新关系并将类型(或关系名称)更改为您的数据标签名称。我使用 apoc 函数来更改(或更新)它。我所做的是

  1. 查找附加到数据的所有节点和关系
  2. 创建所需的关系,但使用虚拟关系类型:REL
  3. 使用 apoc 函数 apoc.refactor.setType 将关系类型从 REL 改为 c.label
  4. 不要忘记删除虚拟关系 REL
Match (a)-[:Input]->(c:Data)-[:Output]->(f)
CREATE (a)-[r:REL]->(f) 
WITH a,r,c,f
CALL apoc.refactor.setType(r,c.label)
YIELD input,output
WITH a,f 
MATCH (a)-[rel:REL]->(f) 
DELETE rel
RETURN a,f  

之前: enter image description here

之后:

enter image description here