欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC(6.6):节点和关系的相互转换

程序员文章站 2024-03-20 10:54:34
...

​​​​​​1. 将关系转换成节点+关系

1.1 定义

        可以将指定关系转换成节点,并在关系的原起始节点和新节点、以及终止节点和新节点之间使用新的关系相连接。被转换的关系的属性则成为新节点的属性。

 

1.2. 过程调用接口

 

过程接口

 


// 将关系转换成节点

CALL apoc.refactor.extractNode(
   rels [rel1, rel2, …],
   labels [label1, label2, …],

   outTpye,

   inType

)

YIELD input,output
 

参数名

类型

缺省值

可为空?

说明

rels

关系数组

待转换关系的数组。

labels

字符串数组

创建的新节点的标签名数组。

outType

字符串

从新节点到(被转换的关系的)终止节点之间会创建新关系,这个参数定义新关系的类型名。

inType

字符串

从(被转换的关系的)起始节点到新节点之间会创建新关系,这个参数定义新关系的类型名。

 

 

 

 

 

 

 

 

 

 

 

 

 

1.3. 示例

//         将(:“皇帝”)-[:建立]->(:“朝代”)关系转换成:
//         (:“皇帝”)-[:参与]->(:“事件”)-[:关于]->(:“朝代”)
//         复制“建立”关系的属性到新节点,并增加新属性name=“改朝换代”

MATCH (n1:皇帝) -[r:建立]-> (n2:朝代)
WITH collect(r) AS rels
CALL apoc.refactor.extractNode(rels,['事件'],'关于','参与') YIELD input, output
WITH output
SET output.name = '改朝换代'
RETURN *

之前

之后

Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC(6.6):节点和关系的相互转换

Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC(6.6):节点和关系的相互转换

 

2. 将节点转换为关系

2.1 定义

        将节点转换为关系,其所有属性成为关系的属性。转换之前与该节点通过进入关系(INCOMING)相连的节点,以及通过流出关系(OUTGOING)相连的节点之间用新关系连接。

        如果没有与该节点相连(包括流入或流出关系)的其他节点,那过程不执行任何操作。

2.2 过程调用接口

 

过程接口

 


// 将节点转换成关系

CALL apoc.refactor.collapseNode (
   nodeId,

   relationshipType

)

YIELD input,output
 

参数名

类型

缺省值

可为空?

说明

nodeId

LONG

待转换节点的数据库ID。

relationshipType

字符串

创建关系的类型名。

 

 

 

 

 

 

2.3 示例

// 将“改朝换代”节点转换成“建立”关系

MATCH (e:事件)
WHERE e.name = '改朝换代'
WITH id(e) AS id
CALL apoc.refactor.collapseNode(id, '建立')
YIELD input, output
RETURN *

 

之前

之后

Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC(6.6):节点和关系的相互转换

Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC(6.6):节点和关系的相互转换