apoc.trigger.toNode

函数 Apoc 扩展

签名

apoc.trigger.toNode(node :: NODE, removedLabels :: MAP, removedNodeProperties :: MAP) :: RELATIONSHIPH

输入参数

名称 类型 默认

节点

NODE

null

removedLabels

MAP

null

removedNodeProperties

MAP

null

使用示例

此函数旨在用于 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;
表 1. 结果
report

(:Report {"created": "2024-12-12T08:33:27.188000000Z", "deletedIds": [12], "labels": ["Movie"]})

© . This site is unofficial and not affiliated with Neo4j, Inc.