apoc.trigger.add
Procedure APOC Core
add a trigger kernelTransaction under a name, in the kernelTransaction you can use {createdNodes}, {deletedNodes} etc., the selector is {phase:'before/after/rollback'} returns previous and new trigger information. Takes in an optional configuration.
Signature
apoc.trigger.add(name :: STRING?, kernelTransaction :: STRING?, selector :: MAP?, config = {} :: MAP?) :: (name :: STRING?, query :: STRING?, selector :: MAP?, params :: MAP?, installed :: BOOLEAN?, paused :: BOOLEAN?)
Input parameters
Name | Type | Default |
---|---|---|
name |
STRING? |
null |
kernelTransaction |
STRING? |
null |
selector |
MAP? |
null |
config |
MAP? |
{} |
Output parameters
Name | Type |
---|---|
name |
STRING? |
query |
STRING? |
selector |
MAP? |
params |
MAP? |
installed |
BOOLEAN? |
paused |
BOOLEAN? |
Enable Triggers
By default triggers are disabled.
We can enable them by setting the following property in apoc.conf
:
apoc.trigger.enabled=true
apoc.trigger.refresh=60000
Option Key | Value | Description |
---|---|---|
apoc.trigger.enabled |
true/false, default false |
Enable/Disable the feature |
apoc.trigger.refresh |
number, default 60000 |
Interval in ms after which a replication check is triggered across all cluster nodes |
Usage Examples
The examples in this section are based on the following graph:
CREATE (:Counter {count:0})
CREATE (f:Foo);
Let’s create a trigger that keeps a count of the number of nodes that have been deleted:
CALL apoc.trigger.add(
'count-removals',
'MATCH (c:Counter)
SET c.count = c.count + size([f IN $deletedNodes WHERE id(f) > 0])',
{}
);
name | query | selector | params | installed | paused |
---|---|---|---|---|---|
"count-removals" |
"MATCH (c:Counter) SET c.count = c.count + size([f IN $deletedNodes WHERE id(f) > 0])" |
{} |
{} |
TRUE |
FALSE |
We’ll now delete the Foo
node:
MATCH (f:Foo)
DELETE f;
0 rows available after 20 ms, consumed after another 0 ms
Deleted 1 nodes
And finally, let’s check that the count
property on our Counter
node has been incremented:
MATCH (c:Counter)
RETURN c.count as count;
count |
---|
1 |