Neo4j- APOC无缘无故触发火灾

时间:2020-07-19 03:35:08

标签: neo4j cypher neo4j-apoc

我有以下两个名为“ 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”关系的节点和一个有“候补名单”的关系。

我不知道怎么了。任何帮助表示赞赏!

0 个答案:

没有答案