#variables #cypher #with-statement
Вопрос:
Скажем, в group
собственности у меня есть ценности cat dog
и chicken egg
. Я хочу присвоить свойству gid
начальные символы значений в group
, т. е. cd
и ce
. Это мой вопрос:
match (n)
with split(n.group," ") as array
set n.gid=left(array[0],1) left(array[1],1)
return n.name, n.gid;
Я получаю эту ошибку:
Variable `n` not defined (line 2, column 48 (offset: 48))
"match (n) with split(n.group," ") as array set n.gid=left(array[0],1) left(array[1],1) return n.name, n.gid;"
^
Однако это работает:
match (n)
with n, split(n.group," ") as array
set n.gid=left(array[0],1) left(array[1],1)
return n.name, n.gid;
Я не понимаю, почему это так? Я проверяю WITH
документацию, но не вижу никаких проблем?
Ответ №1:
Из самого документа С документами
Важно отметить, что С влияет на переменные в области видимости. Любые переменные, не включенные в предложение WITH, не переносятся на остальную часть запроса.
В первом запросе,
match (n)
with split(n.group," ") as array
...
только array
переносится на остальную часть запроса, n
забывается., вот почему вы получаете ошибку.
Комментарии:
1. Я понимаю. Но если предположить, что он переносит переменные вперед, что может пойти не так?
2. Внутренне механизм выполнения шифра экономит память при хранении этих переменных. С некоторыми переменными может быть связано много данных. Кроме того, я полагаю, что это сэкономило бы некоторое время на обработку.