#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 .