apoc.uuid.install
Procedure APOC Full
CALL apoc.uuid.install(label, {addToExistingNodes: true/false, uuidProperty: 'uuid'}) yield label, installed, properties, batchComputationResult | it will add the uuid transaction handler
for the provided label
and uuidProperty
, in case the UUID handler is already present it will be replaced by the new one
Signature
apoc.uuid.install(label :: STRING?, config = {} :: MAP?) :: (batchComputationResult :: MAP?, label :: STRING?, installed :: BOOLEAN?, properties :: MAP?)
This procedure is not intended to be used in a cluster environment, and may act unpredictably. |
Config parameters
The procedure support the following config parameters:
name | type | default | description |
---|---|---|---|
addToExistingNodes |
Boolean |
true |
adds UUID values to existing nodes. Will override an existing value. |
addToSetLabels |
Boolean |
false |
adds UUID values even when there is a set label. For example: |
uuidProperty |
String |
"uuid" |
the property key for the UUID value |
Output parameters
Name | Type |
---|---|
batchComputationResult |
MAP? |
label |
STRING? |
installed |
BOOLEAN? |
properties |
MAP? |
Enable automatic UUIDs
This procedure is part of a set of procedures that handle automatic adding of UUID properties, via the UUID Handler Lifecycle. The UUID handler is a transaction event handler that automatically adds the UUID property to a provided label and for the provided property name.
By default automatic adding of UUIDs is disabled.
We can enable it by setting the following property in apoc.conf
:
apoc.uuid.enabled=true
Usage Examples
We need to create a unique constraint for the label and property on which we want to add UUIDs.
If we try to setup UUID creation on nodes with the Person
label without adding a constraint, we’ll get an exception as shown below:
CALL apoc.uuid.install("Person");
Failed to invoke procedure |
We can create a constraint on the (Person, uuid)
label/property pair by running the following query:
CREATE CONSTRAINT ON (person:Person)
ASSERT person.uuid IS UNIQUE;
And now we can automatically add UUIDs to all new nodes, as well as existing nodes, by running the following query:
CALL apoc.uuid.install("Person");
By default, UUID values will be added to existing nodes and will override existing values.
We can pass the config |
batchComputationResult |
label |
installed |
properties |
{failedParams: {}, committedOperations: 3, batch: {total: 1, committed: 1, failed: 0, errors: {}}, wasTerminated: FALSE, batches: 1, timeTaken: 0, retries: 0, errorMessages: {}, total: 3, operations: {total: 3, committed: 3, failed: 0, errors: {}}, failedOperations: 0, failedBatches: 0} |
"Person" |
TRUE |
{uuidProperty: "uuid"} |
Now let’s create a new Person
node;
CREATE (:Person {name: "Tom Hanks"});
And if we look for all Person
nodes, we’ll see it has a uuid
property:
MATCH (p:Person {name: "Tom Hanks"})
RETURN p;
p |
---|
(:Person {name: "Tom Hanks", uuid: "cec34337-9709-46af-bbb7-9e0742d8aaa7"}) |
The uuid
property will be created also with a label SET
when the addToSetLabels
configuration is set to true. For example:
CREATE (:AnotherLabel {name: "Tom Hanks"});
// ...
MATCH (n:AnotherLabel) SET n:Person;
If we want to use a different property key for our UUID value, we can pass in the uuidProperty
key, not forgetting to first setup a constraint:
CREATE CONSTRAINT ON (person:Person)
ASSERT person.myUUID IS UNIQUE;
CALL apoc.uuid.install("Person", {uuidProperty: "myUUID"});
batchComputationResult |
label |
installed |
properties |
{failedParams: {}, committedOperations: 1, batch: {total: 1, committed: 1, failed: 0, errors: {}}, wasTerminated: FALSE, batches: 1, timeTaken: 0, retries: 0, errorMessages: {}, total: 1, operations: {total: 1, committed: 1, failed: 0, errors: {}}, failedOperations: 0, failedBatches: 0} |
"Person" |
TRUE |
{uuidProperty: "myUUID"} |
And now let’s find those Person
nodes again:
MATCH (p:Person {name: "Tom Hanks"})
RETURN p;
p |
---|
(:Person {name: "Tom Hanks", uuid: "cec34337-9709-46af-bbb7-9e0742d8aaa7", myUUID: "d09f177b-ff91-4eb9-aac0-73e7a850c9ba"}) |