apoc.trigger.toNode
Function APOC Full
Signature
apoc.trigger.toNode(node :: NODE, removedLabels :: MAP, removedNodeProperties :: MAP) :: RELATIONSHIPH
Input parameters
Name | Type | Default |
---|---|---|
node |
NODE |
null |
removedLabels |
MAP |
null |
removedNodeProperties |
MAP |
null |
Usage Examples
This function is intended to be used within an apoc.trigger.install Cypher statement.
If we want to create a 'before' or 'after' trigger query using $deletedNodes
, and retrieve entity information such as labels and/or properties, we cannot use the classic Cypher functions labels() and properties().
Instead, we have to leverage virtual nodes through the function apoc.trigger.toNode(node, $removedLabels, $removedNodeProperties)
.
For example, to create a new Report
node with a list of deleted node IDs and all the labels retrieved for each deleted node, we can execute:
CALL apoc.trigger.install(
'neo4j', 'myTrigger',
"UNWIND $deletedNodes as deletedNode
WITH apoc.trigger.toNode(deletedNode, $removedLabels, $removedNodeProperties) AS deletedNode
CALL apoc.merge.node(
['Report'],
{labels: apoc.node.labels(deletedNode)},
{created: datetime()},
{updated: datetime()}
) YIELD node AS report
WITH report, deletedNode
SET report.deletedIds = coalesce(report.deletedIds, [])+[id(deletedNode)]" ,
{phase:'before'}
);
Now, let’s create and delete a Movie
node:
CREATE (:Movie {title: "The White Tiger"});
MATCH (movie:Movie {title: "The White Tiger"}) DELETE movie;
Finally, let’s check the Report
node:
MATCH (report:Report {labels: ['Movie']})
RETURN report;
report |
---|
(:Report {"created": "2024-12-12T08:33:27.188000000Z", "deletedIds": [12], "labels": ["Movie"]}) |