我有以下两个名为“ loadEnrollments”和“ loadDeenrollments”的触发器。
CALL apoc.trigger.add('loadEnrollments',
"UNWIND apoc.trigger.nodesByLabel($assignedLabels, 'Enrollment') AS node
MERGE (p1:SPerson { name: node.name, cell: node.cell, created_at: node.created_at})
WITH p1, node
MATCH (n:SPerson)
WITH node, COUNT(n) as size
CALL apoc.do.when(
size>3,
'
MATCH(p1:SPerson),(c:Course)
WHERE p1.name=node.name AND c.name=\"Paradigm Shifting 101\"
CREATE (p1)-[:Waitlist]->(c)
SET p1.status=2
WITH node
RETURN NULL',
'
MATCH(p1:SPerson),(c:Course)
WHERE p1.name=node.name AND c.name=\"Paradigm Shifting 101\"
CREATE (p1)-[:Enrolled]->(c)
SET p1.status=1
WITH node
RETURN NULL', {node:node}) YIELD value
DETACH DELETE node",
{ phase: 'after' })
CALL apoc.trigger.add('loadDeenrollments',
"
UNWIND apoc.trigger.nodesByLabel($assignedLabels, 'Deenrollment') AS node
MATCH (p1:SPerson {name: node.name, cell: node.cell})
MATCH (c:Course {name: 'Paradigm Shifting 101'})
CREATE (p1)-[:Deenrolled]->(c)
SET p1.status=3
WITH p1, node,c
MATCH (p1:SPerson {name: node.name, cell: node.cell})-[r:Enrolled]->(c)
DELETE r
DETACH DELETE node
WITH p1,c
MATCH (p1)-[r:Enrolled]->(c)
WITH COUNT(r) as k
CALL apoc.do.when(
k<3, '
MATCH (p1:SPerson)-[:Waitlist]->(c:Course)
WITH min(p1.created_at) AS min
MATCH (p1:SPerson),(c:Course)
WHERE p1.created_at = min
CREATE (p1)-[:Random]->(c)
RETURN p1,c',
'
MATCH (n:SPerson) RETURN n
',{k:k}
) YIELD value
RETURN NULL",
{ phase: 'after' })
当我同时加载它们并通过以下命令创建“注册”节点时。 “ loadenrollment”触发器可以按预期工作,并为cat1,cat2和cat3创建SPerson节点,并与“ course”节点创建“已注册”关系。
CREATE (:Enrollment { name: "cat1", cell: "123", created_at: TIMESTAMP()});
CREATE (:Enrollment { name: "cat2", cell: "123", created_at: TIMESTAMP()});
CREATE (:Enrollment { name: "cat3", cell: "123", created_at: TIMESTAMP()});
当我创建第四个节点时会出现问题
CREATE (:Enrollment { name: "cat4", cell: "123", created_at: TIMESTAMP()});
理想情况下,它应该为cat4创建一个SPerson节点,并与“ course”节点添加“ waitlist”关系。 但是由于某种原因,当我创建该节点时,它添加了“ waitlist”关系,但同时还添加了我在第二个触发器(“ loadDeenrollments”)中定义的“ Random”关系。这永远不会发生,因为此触发器仅在我创建“取消注册”节点时触发,但由于某种原因它正在执行该触发器。
此外,我尝试仅添加“ loadEnrollments”触发器,并且它按预期工作(显然,因为没有“ loadDeenrollments”触发器),即创建四个“ SPerson”节点,以及三个具有“ enrolled”关系的节点和一个有“候补名单”的关系。
我不知道怎么了。任何帮助表示赞赏!