apoc.refactor.rename.type
Syntax |
|
||
Description |
Renames all |
||
Input arguments |
Name |
Type |
Description |
|
|
The type to rename. |
|
|
|
The new type for the relationship. |
|
|
|
The relationships to apply the new name to. If this list is empty, all relationships with the old type will be renamed. The default is: |
|
|
|
|
|
Return arguments |
Name |
Type |
Description |
|
|
The number of batches the operation was run in. |
|
|
|
The total number of renamings performed. |
|
|
|
The time taken to complete the operation. |
|
|
|
The total number of committed operations. |
|
|
|
The total number of failed operations. |
|
|
|
The total number of failed batches. |
|
|
|
The total number of retries. |
|
|
|
The collected error messages. |
|
|
|
|
|
|
|
|
|
|
|
Constraints associated with the given label or type. |
|
|
|
Indexes associated with the given label or type. |
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.
Batching, as well as parallel execution, can be achieved in Cypher using CALL {…} IN CONCURRENT TRANSACTIONS
.
For more information, see CALL subqueries in transactions → Concurrent transactions.
Usage Examples
The examples in this section are based on the following sample graph:
CREATE (mark:Engineer {name: "Mark", city: "London"})
CREATE (jennifer:Engineer {name: "Jennifer", city: "St Louis"})
CREATE (michael:Engineer {name: "Michael", city: "Dresden"})
CREATE (jim:Engineer {name: "Jim", city: "London"})
CREATE (alistair:Engineer {name: "Alistair", city: "London"})
MERGE (jim)-[:COLLEAGUES {since: date("2006-05-01")}]->(alistair)
MERGE (mark)-[:COLLEAGUES {since: date("2018-02-01")}]->(jennifer)
MERGE (mark)-[:COLLEAGUES {since: date("2013-05-01")}]->(michael);
The following changes the relationship type between Jim and Alistair from COLLEAGUES
to FROLLEAGUES
:
MATCH (:Engineer {name: "Jim"})-[rel]->(:Engineer {name: "Alistair"})
WITH collect(rel) AS rels
CALL apoc.refactor.rename.type("COLLEAGUES", "FROLLEAGUES", rels)
YIELD batches
RETURN count(*) AS count
MATCH (:Engineer {name: "Jim"})-[rel:COLLEAGUES]->(:Engineer {name: "Alistair"})
CALL (rel) {
WITH startNode(rel) AS startNode, endNode(rel) AS endNode
CREATE (f)-[r:FROLLEAGUES]->(b)
SET r = properties(rel)
DELETE rel
}
RETURN count(*) AS count
count | |
---|---|
1 |
After this query has run, we’ll have the following graph:

APOC is not inverting the type; instead, it adds a new relationship with the desired direction and deletes the original. |