Neo4j 图数据库高级应用系列 / 服务器扩展指南 APOC(6.6):节点和关系的相互转换
1. 将关系转换成节点+关系
1.1 定义
可以将指定关系转换成节点,并在关系的原起始节点和新节点、以及终止节点和新节点之间使用新的关系相连接。被转换的关系的属性则成为新节点的属性。
1.2. 过程调用接口
过程接口
|
CALL apoc.refactor.extractNode( 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 *
之前 |
之后 |
2. 将节点转换为关系
2.1 定义
将节点转换为关系,其所有属性成为关系的属性。转换之前与该节点通过进入关系(INCOMING)相连的节点,以及通过流出关系(OUTGOING)相连的节点之间用新关系连接。
如果没有与该节点相连(包括流入或流出关系)的其他节点,那过程不执行任何操作。
2.2 过程调用接口
过程接口
|
CALL apoc.refactor.collapseNode ( 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 *
之前 |
之后 |
上一篇: 网易邮箱注册界面设计 html
下一篇: jsDOM分享1