Исключение синтаксиса Neo4j при создании процедуры apo c внутри триггера apo c - PullRequest
0 голосов
/ 14 июля 2020

Я создаю процедуру апо c внутри триггера апо c. Ошибка в журналах гласит:

"org.neo4j.exceptions.SyntaxException: Variable node not defined (строка 1, столбец 26 (смещение: 25))" MATCH (p1: SPerson {name: node .name}) CREATE (p1) - [: Enrolled] -> (c) "

"

My APO c код триггера

 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 (c:Course {name: 'Paradigm Shifting 101'})
 MATCH (n:SPerson)
 WITH p1, node, COUNT(n) as size
 CALL apoc.do.when(
 size>3,'MERGE (p1)-[:Waitlist]->(c)',
 'MATCH(p1:SPerson { name: node.name}) CREATE (p1)-[:Enrolled]->(c)') YIELD value
 DETACH DELETE node", 
 { phase: 'after' });

1 Ответ

0 голосов
/ 14 июля 2020

Что касается вашего непосредственного вопроса, вам необходимо передать node в apoc.do.when, чтобы его внутренний запрос мог получить к нему доступ.

Однако на самом деле вам следует изменить свой запрос, чтобы внутренний запрос даже не нужно делать MATCH:

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 (c:Course {name: 'Paradigm Shifting 101'})
   MATCH (n:SPerson)
   WITH p1, c, node, COUNT(n) as size
   CALL apoc.do.when(
     size>3,
     'MERGE (p1)-[:Waitlist]->(c)',
     'MERGE (p1)-[:Enrolled]->(c)',
     {p1: p1, c: c}
   ) YIELD value
   DETACH DELETE node", 
   { phase: 'after' }
);
...