Вы смешиваете ar
и arr
повсюду.
В вашем внешнем запросе arr
- это список. Тем не менее, вы передаете arr
в течение ar
при вызове apoc.do.when()
и рассматриваете его как карту (ar.domain
и ar.email
, очевидно, не будут работать здесь в apoc.do.when()
)
Вы также ссылаетесь на arr.domain
и arr.email
в остальной части apoc.do.when()
, но arr
находится вне области действия.
Вам также не нужно передавать c
в вызов процедуры; оценка в первом аргументе использует существующую область видимости, только запросы после этого требуют передачи переменных между областью действия.
Также ON SET
недопустимо, вы должны использовать ON MATCH SET
, ON CREATE SET
или просто SET
.
Все это говорит о том, что вам даже не нужно использовать apoc.do.when()
, похоже, вам нужно использовать только MERGE и SET:
WITH [{domain:"domain1.com", email: "some@email.com"},
{domain:"domain3.com", email: "some03@email.com"}] as arr
UNWIND arr as ar
MERGE (x:Info {domain:ar.domain})
SET x.email = ar.email
RETURN x
Помните, что MERGE похож на MATCH или CREATE (когда совпадений не найдено), поэтому после MERGE он всегда будет привязан к узлу, либо к существующему узлу, либо к вновь созданному узлу, и так как вы хотите установить email
свойство в любом случае, мы можем просто использовать SET здесь.