Ошибка Neo4j «переменная не определена» в подзапросе — не удается увидеть внешние переменные

#neo4j

#neo4j

Вопрос:

Похоже, что подзапрос Neo4j не получает внешние переменные parent1, parent2, parent3 .

Вместо этого он выдает ошибку:

 Variable `parent1` not defined (line 10, column 8 (offset: 282))
"  WITH parent1, parent2, parent3"
 

parent1 очень четко определено выше. Эта ошибка возникает только в том случае, если я использую EXISTS предложение.

Мой минимальный сценарий взлома приведен ниже:

 // using three extant nodes, merge a child node
// THe child should only be created if the whole pattern doesnt exist

MERGE (parent1:Parent1 {parent1id: 0})
MERGE (parent2:Parent2 {parent2id: 0})
MERGE (parent3:Parent3 {parent3id: 0})

WITH parent1, parent2, parent3
CALL {
  WITH parent1, parent2, parent3
  WHERE NOT EXISTS{MATCH (parent2)-->(matched: Child {childi: 0})<--(parent1), (parent3)-->(matched)}
  RETURN 1 as result
}
RETURN *
 

Кто-нибудь знает почему?

Комментарии:

1. Правильно ли определены переменные в MERGE предложении? Я думал, что для этого вам нужно MATCH предложение, но я могу ошибаться.

2. Попробуйте вставить MATCH промежуточное значение между последним MERGE и WITH предложением.

3. Но если я объединился, то узлы должны существовать всегда. Что вы подразумеваете под четко определенным?

4. Да, узлы должны существовать, но имена переменных, которые вы ранее определили, могут больше не находиться в области видимости.

Ответ №1:

Попробуйте это:

 // using three extant nodes, merge a child node
// THe child should only be created if the whole pattern doesnt exist

MERGE (parent1:Parent1 {parent1id: 0})
MERGE (parent2:Parent2 {parent2id: 0})
MERGE (parent3:Parent3 {parent3id: 0})

MATCH (parent1:Parent1 {parent1id: 0})
WITH parent1
MATCH (parent2:Parent2 {parent2id: 0})
WITH parent1, parent2
MATCH (parent3:Parent3 {parent3id: 0})
WITH parent1, parent2, parent3
CALL {
  WITH parent1, parent2, parent3
  WHERE NOT EXISTS{MATCH (parent2)-->(matched: Child {childi: 0})<--(parent1), (parent3)-->(matched)}
  RETURN 1 as result
}
RETURN *
 

Я думаю, проблема в том, что MERGE команда является своего рода «завершающим» предложением, и после нее переменные выходят за рамки.

Комментарии:

1. Попробуйте использовать больше предложений WITH, например edit .