如何在APOC触发器中获取被删除关系连接的节点?
解决APOC触发器中获取被删除关系两端节点的问题
你当前代码里用MATCH (m)-[deletedRel]->(n)无法匹配结果,核心原因是在before阶段,待删除的关系已经从图中标记移除,常规MATCH语句无法再通过关系关联到节点。正确做法是直接通过APOC函数从已转换的关系对象中提取两端节点。
修改后的完整代码如下:
CALL apoc.trigger.add('myTrigger', "UNWIND $deletedRelationships as deletedRel WITH apoc.trigger.toRelationship(deletedRel, $removedRelationshipProperties) AS deletedRel WITH deletedRel WHERE apoc.rel.type(deletedRel) = 'MY_REL_TYPE' // 直接从关系对象中提取起始、结束节点 WITH deletedRel, apoc.rel.startNode(deletedRel) AS m, apoc.rel.endNode(deletedRel) AS n CREATE (r:Report {myId: id(deletedRel), type: apoc.rel.type(deletedRel)})" , {phase:'before'})
关键说明:
apoc.rel.startNode(deletedRel):获取被删除关系的起始节点(对应原语句中的m)apoc.rel.endNode(deletedRel):获取被删除关系的结束节点(对应原语句中的n)
这种方式不需要依赖图中的关系匹配,直接从内存中的关系对象提取节点,能在before阶段准确获取到目标节点。
内容的提问来源于stack exchange,提问作者Software Dev
相关产品推荐
相关产品推荐

