|| apoc.refactor.cloneSubgraph - APOC 核心文档 - Neo4j 文档

apoc.refactor.cloneSubgraph

详细信息

语法

apoc.refactor.cloneSubgraph(nodes [, rels, config ]) :: (input, output, error)

描述

克隆给定的 NODE 值及其标签和属性(可选通过 config MAP 中的 skipProperties LIST<STRING> 跳过任何属性),并克隆给定的 RELATIONSHIP 值。如果没有提供 RELATIONSHIP 值,则将克隆给定 NODE 值之间所有现有的 RELATIONSHIP 值。

输入参数

名称

类型

描述

nodes

LIST<NODE>

要克隆的节点。

rels

LIST<RELATIONSHIP>

要克隆的关系。如果留空,将克隆给定节点之间所有关系。默认值是:[]

config

MAP

{ standinNodes :: LIST<LIST<NODE>>, skipProperties :: LIST<STRING> }。默认值是:{}

返回参数

名称

类型

描述

input

INTEGER

原始实体的内部 ID。

output

NODE

复制的实体。

error

STRING

复制过程中发生的任何错误。

使用示例

本节中的示例基于以下示例图

CREATE  (rootA:Root{name:'A'}),
        (rootB:Root{name:'B'}),
        (n1:Node{name:'node1', id:1}),
        (n2:Node{name:'node2', id:2}),
        (n3:Node{name:'node3', id:3}),
        (n4:Node{name:'node4', id:4}),
        (n5:Node{name:'node5', id:5}),
        (n6:Node{name:'node6', id:6}),
        (n7:Node{name:'node7', id:7}),
        (n8:Node{name:'node8', id:8}),
        (n9:Node{name:'node9', id:9}),
        (n10:Node{name:'node10', id:10}),
        (n11:Node{name:'node11', id:11}),
        (n12:Node{name:'node12', id:12})
        CREATE (rootA)-[:LINK]->(n1)-[:LINK]->(n2)-[:LINK]->(n3)-[:LINK]->(n4)
        CREATE                  (n1)-[:LINK]->(n5)-[:LINK]->(n6)<-[:LINK]-(n7)
        CREATE                                (n5)-[:LINK]->(n8)
        CREATE                                (n5)-[:LINK]->(n9)-[:DIFFERENT_LINK]->(n10)
        CREATE (rootB)-[:LINK]->(n11);
apoc.refactor.cloneSubgraph before
图 1. 子图克隆前的图

此过程克隆由节点列表和关系列表定义的子图。如果未提供关系,则将克隆给定节点之间所有关系。当您希望确保克隆的子图不连接到原始节点或子图之外的节点时,此功能非常有用。

我们可以从 apoc.path.subgraphAll 的输出中获取节点和关系,并根据调用该过程时的关系类型进行过滤。

以下查询克隆了一个从 rootA 开始的子树,该子树包含传出 :LINK 关系,并将该子图附加到 rootB。rootB 充当 rootA 的替身,而 rootA 未被克隆

MATCH  (rootA:Root{name:'A'}),
       (rootB:Root{name:'B'})
CALL apoc.path.subgraphAll(rootA, {relationshipFilter:'LINK>'})
YIELD nodes, relationships
CALL apoc.refactor.cloneSubgraph(
    nodes,
    [rel in relationships WHERE type(rel) = 'LINK'],
    { standinNodes:[[rootA, rootB]] })
YIELD input, output, error
RETURN input, output, error;
结果
input output error

31378

(:Node {name: "node1", id: 1})

NULL

31382

(:Node {name: "node5", id: 5})

NULL

31379

(:Node {name: "node2", id: 2})

NULL

31386

(:Node {name: "node9", id: 9})

NULL

31383

(:Node {name: "node6", id: 6})

NULL

31385

(:Node {name: "node8", id: 8})

NULL

31380

(:Node {name: "node3", id: 3})

NULL

31381

(:Node {name: "node4", id: 4})

NULL

apoc.refactor.cloneSubgraph after
图 2. 子图克隆后的图
© . This site is unofficial and not affiliated with Neo4j, Inc.