apoc.refactor.categorize
Procedure
apoc.refactor.categorize(sourceKey STRING, type STRING, outgoing BOOLEAN, label STRING, targetKey STRING, copiedKeys LIST<STRING>, batchSize INTEGER)
- creates new category NODE
values from NODE
values in the graph with the specified sourceKey
as one of its property keys.
The new category NODE
values are then connected to the original NODE
values with a RELATIONSHIP
of the given type.
Signature
apoc.refactor.categorize(sourceKey :: STRING, type :: STRING, outgoing :: BOOLEAN, label :: STRING, targetKey :: STRING, copiedKeys :: LIST<STRING>, batchSize :: INTEGER)
Input parameters
Name | Type | Default |
---|---|---|
sourceKey |
STRING |
null |
type |
STRING |
null |
outgoing |
BOOLEAN |
null |
label |
STRING |
null |
targetKey |
STRING |
null |
copiedKeys |
LIST<STRING> |
null |
batchSize |
INTEGER |
null |
Usage Examples
The examples in this section are based on the following sample graph:
CREATE (:Movie {title: 'A Few Good Men', genre: 'Drama'});
We want to move the genre
from the Movie
node to a new node with the Genre
label and name
property.
We’ll also create a GENRE
relationship from the Movie
node to that genre node.
This procedure requires us to create a unique constraint on the Genre
label, name
property, otherwise we’ll get the following exception:
CALL apoc.refactor.categorize('genre', 'GENRE', true, "Genre", "name", [], 100);
Failed to invoke procedure `apoc.refactor.categorize`: Caused by: java.lang.IllegalArgumentException: Before execute this procedure you must define an unique constraint for the label and the targetKey:
CREATE CONSTRAINT FOR (n:`Genre`) REQUIRE n.`name` IS UNIQUE
Once we’ve created the constraint, we can re-run the procedure, and then see the new graph structure by running the following query:
MATCH p=()-[:GENRE]->()
RETURN p;