apoc.trigger.toRelationship

函数 Apoc 扩展

签名

apoc.trigger.toRelationship(rel :: RELATIONSHIP, removedRelationshipProperties :: MAP) :: RELATIONSHIP

输入参数

名称 类型 默认

关系

RELATIONSHIP

null

removedRelationshipProperties

MAP

null

使用示例

此函数旨在 apoc.trigger.install Cypher 语句中使用。

如果我们希望使用 $deletedRelationships 创建“之前 (before)”或“之后 (after)”触发器查询,并检索诸如类型和/或属性之类的实体信息,我们将无法使用经典的 Cypher 函数 type() 和 properties()。相反,必须通过函数 apoc.trigger.toRelationship(rel, $removedRelationshipProperties) 来利用虚拟关系。

例如,若要创建一个包含已删除关系 ID 列表以及为每个已删除关系检索到的类型的新 Report 节点,我们可以执行:

CALL apoc.trigger.install(
    'neo4j', 'myTrigger',
    "UNWIND $deletedRelationships as deletedRel
    WITH apoc.trigger.toRelationship(deletedRel, $removedRelationshipProperties) AS deletedRel
    CALL apoc.merge.node(
          ['Report'],
          {type: apoc.rel.type(deletedRel)},
          {created: datetime()},
          {updated: datetime()}
    ) YIELD node AS report
    WITH report, deletedRel
    SET report.deletedIds = coalesce(report.deletedIds, [])+[id(deletedRel)]" ,
    {phase:'before'}
);

现在,让我们在 Movie 节点和 Genre 节点之间创建并删除一个 IN_GENRE 关系

MERGE (movie:Movie {title: "The White Tiger"})
MERGE (genre:Genre {name: "Triller"})
MERGE (movie)-[IN_GENRE]->(genre);
MATCH (movie:Movie {title: "The White Tiger"})-[r:IN_GENRE]->(genre:Genre {name: "Triller"}) DELETE r;

最后,让我们检查一下 Report 节点

MATCH (report:Report {labels: ['IN_GENRE']})
RETURN report;
表 1. 结果
report

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

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