apoc.refactor.extractNode
Syntax |
|
||
Description |
Expands the given |
||
Input arguments |
Name |
Type |
Description |
|
|
The relationships to turn into new nodes. Relationships can be of type |
|
|
|
The labels to be added to the new nodes. |
|
|
|
The type of the outgoing relationship. |
|
|
|
The type of the ingoing relationship. |
|
Return arguments |
Name |
Type |
Description |
|
|
The internal id of the original entity. |
|
|
|
The copied entity. |
|
|
|
Any error that occurred during the copy process. |
Refactoring nodes using Cypher
Node labels and relationship types can be referenced dynamically in Cypher without using APOC.
CREATE (n1:$(label))-[r:$(type)]->(n2:$(label))
MERGE (n1:$(label))-[r:$(type)]->(n2:$(label))
MATCH (n1:$(label))-[r:$(type)]->(n2:$(label))
The dynamically calculated type must evaluate to a STRING
or LIST<STRING>
.
For more information, see the Cypher Manual → CREATE,
MERGE, MATCH.
Usage Examples
The examples in this section are based on the following sample graph:
CREATE (origin:Airport {code: "LHR"})
CREATE (destination:Airport {code: "AMS"})
CREATE (origin)-[:FLIGHT {number: "BA001"}]->(destination);
The following creates a Flight
node with an IN
relationship from LHR
and an OUT
relationship to AMS
:
MATCH (:Airport)-[rel:FLIGHT]->(:Airport)
WITH collect(rel) AS rels
CALL apoc.refactor.extractNode(rels,['Flight'],'OUT','IN')
YIELD input, output
RETURN input, output;
MATCH (:Airport)-[rel:FLIGHT]->(:Airport)
CALL (rel) {
WITH startNode(rel) AS startNode, endNode(rel) AS endNode, rel
CREATE (startNode)-[:IN]->(f:Flight)-[:OUT]->(endNode)
SET f = properties(rel)
DELETE rel
}
RETURN 0 AS input, newNode AS output
input | output |
---|---|
0 |
(:Flight {number: "BA001"}) |
We can list all the Flight
nodes by running the following query:
MATCH path = (origin)-[:IN]->(:Flight)-[:OUT]->(destination)
RETURN path;
path |
---|
(:Airport {code: "LHR"})-[:IN]→(:Flight {number: "BA001"})-[:OUT]→(:Airport {code: "AMS"}) |