apoc.trigger.toRelationship
函数 Apoc 扩展
签名
apoc.trigger.toRelationship(rel :: RELATIONSHIP, removedRelationshipProperties :: MAP) :: RELATIONSHIP
使用示例
此函数旨在 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;
| report |
|---|
(:Report {"created": "2024-12-12T08:33:27.188000000Z", "deletedIds": [12], "type": "IN_GENRE"}) |