apoc.trigger.toNode
函数 Apoc 扩展
签名
apoc.trigger.toNode(node :: NODE, removedLabels :: MAP, removedNodeProperties :: MAP) :: RELATIONSHIPH
使用示例
此函数旨在用于 apoc.trigger.install Cypher 语句中。
如果我们希望使用 $deletedNodes 创建“之前 (before)”或“之后 (after)”触发器查询,并获取实体信息(如标签和/或属性),则不能使用常规的 Cypher 函数 labels() 和 properties()。相反,我们必须通过函数 apoc.trigger.toNode(node, $removedLabels, $removedNodeProperties) 来利用虚拟节点。
例如,要创建一个包含已删除节点 ID 列表以及为每个已删除节点检索到的所有标签的新 Report 节点,我们可以执行:
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'}
);
现在,让我们创建一个 Movie 节点并将其删除:
CREATE (:Movie {title: "The White Tiger"});
MATCH (movie:Movie {title: "The White Tiger"}) DELETE movie;
最后,让我们检查一下 Report 节点:
MATCH (report:Report {labels: ['Movie']})
RETURN report;
| report |
|---|
(:Report {"created": "2024-12-12T08:33:27.188000000Z", "deletedIds": [12], "labels": ["Movie"]}) |