Rename
Procedures set for renaming labels, relationship types, nodes and relationships' properties. They return the list of eventually impacted constraints and indexes, the user should take care of.
The available procedures are described in the table below:
|
rename a label from 'oldLabel' to 'newLabel' for all nodes. If 'nodes' is provided renaming is applied to this set only |
|
rename all relationships with type 'oldType' to 'newType'. If 'rels' is provided renaming is applied to this set only |
|
rename all node’s property from 'oldName' to 'newName'. If 'nodes' is provided renaming is applied to this set only |
|
rename all relationship’s property from 'oldName' to 'newName'. If 'rels' is provided renaming is applied to this set only |
As the collection of data is processed in batch via apoc.periodic.iterate
these procedures support the following config parameters:
name | type | default | description |
---|---|---|---|
batchSize |
Long |
10000 |
run the specified number of operation statements in a single tx - params: {_count, _batch} |
parallel |
boolean |
true |
run operation statements in parallel (note that statements might deadlock if conflicting) |
retries |
Long |
0 |
if the operation statement fails with an error, sleep 100ms and retry until retries-count is reached - param {_retry} |
batchMode |
String |
"BATCH" |
how data-driven statements should be processed by operation statement. Valid values are: * "BATCH" - execute operation statement once per batchSize. Operation statement is prefixed with the following, which extracts each field returned in the data-driven statement from the |
concurrency |
Long |
50 |
number of concurrent tasks are generated when using |
Example Usage
The examples below will help us learn how to use these procedures.
Engineer
connected by COLLEAGUES
relationships: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)
If we execute this query, it will result in the following graph:
Renaming node labels
Engineer
to DevRel
:MATCH (person:Engineer)
WHERE person.name IN ["Mark", "Jennifer", "Michael"]
WITH collect(person) AS people
CALL apoc.refactor.rename.label("Engineer", "DevRel", people)
YIELD committedOperations
RETURN committedOperations
If we execute this query, it will result in the following graph:
Renaming relationship types
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 committedOperations
RETURN committedOperations
Renaming node properties
city
to location
for all nodes with the DevRel
label:MATCH (person:DevRel)
WITH collect(person) AS people
CALL apoc.refactor.rename.nodeProperty("city", "location", people)
YIELD committedOperations
RETURN committedOperations
MATCH (n)
RETURN (n)
n |
---|
(:DevRel {name: "Jennifer", location: "St Louis"}) |
(:DevRel {name: "Michael", location: "Dresden"}) |
(:Engineer {city: "London", name: "Jim"}) |
(:DevRel {name: "Mark", location: "London"}) |
(:Engineer {city: "London", name: "Alistair"}) |
Renaming relationship properties
since
to from
for all relationships:MATCH ()-[rel]->()
WITH collect(rel) AS rels
CALL apoc.refactor.rename.typeProperty("since", "from", rels)
YIELD committedOperations
RETURN committedOperations
MATCH path = ()-[]->()
RETURN path
path |
---|
[{"name":"Mark","location":"London"},{"from":"2018-02-01"},{"name":"Jennifer","location":"St Louis"}] |
[{"name":"Mark","location":"London"},{"from":"2013-05-01"},{"name":"Michael","location":"Dresden"}] |
[{"name":"Jim","city":"London"},{"from":"2006-05-01"},{"name":"Alistair","city":"London"}] |