我遇到了意外的行为,无法弄清是什么原因造成的。我正在使用apoc 3.5.0.9,并且试图在“阶段:之后” 中创建一个触发器,该触发器与已用其他节点更新的节点建立关系,但这会导致永无止境的触发器。
例如,使用此数据集:
CREATE (:TEST {name:'x', _executed:0});
CREATE (:TEST {name:'y', _executed:0});
这个简单的触发器:
CALL apoc.trigger.add('triggerTest','UNWIND apoc.trigger.propertiesByKey({assignedNodeProperties},"_executed") as prop
WITH prop.node as n
CREATE (z:SON {father:id(n)})
CREATE (n)-[:GENERATED]->(z)
',
{phase:'after'});
应该捕获哪个更新事件,并在更新 _executed 属性的事务提交后,与更新的节点和新节点 z 建立新关系。
然后,如果我尝试更新此 _executed 属性,例如:
MATCH (a:TEST)
WHERE a.name = 'x'
SET a._executed = a._executed+1
除非我终止此查询,否则它似乎永远不会结束(neo4j桌面应用程序的圆形微调框将一直保留在那里),并且如果我终止它,它将使图形保持更新前的状态,除了_executed属性确实已更新...但是新节点或新关系均未创建。
如果该触发条件处于“阶段:之前” ,或者在触发条件中未创建与更新的节点有关的新关系(即,如果没有使用节点创建的关系) n ),这具有预期的行为,并且一切顺利...
任何人都可以帮助我了解在“阶段:之后” 阶段的原因吗?