Как заменить записи в строковом массиве шифром - PullRequest
0 голосов
/ 08 октября 2019

У меня есть свойство строкового массива, например:

["name1", "name2", "name3", "name2", "name4"]

Я хотел бы заменить в этом массиве, например, «name2» на «name5»:

["name1", "name5", "name3", "name5", "name4"]

До сих пор я придумал такой запрос:

MATCH (parent)-[rel]->(child)
WHERE 'name2' IN rel.names 
SET rel.names = [x IN (rel.names+['name5']) WHERE x<>"name2"] 

В результате получается почти то, что я хочу: ["name1", "name3", "name4", "name5"]

Проблема этогозапрос очевиден - он просто добавляет только один раз «name5» статически, не проверяя, как часто «name2» находится в массиве. Например, если у меня есть "name2" n-times , запрос только добавляет one"name5" вместо n-times.

Без «where» в запросе добавляется «name5» к массивам, в которые даже не включено «name2». Правильный подход должен заключаться в том, что вместо этого запрос должен найти 0 раз «name2» и добавить 0 раз «name5». Так что часть где не должна быть обязательной. Как бы вы решили проблему, и подходит ли мое решение к правильному пути?

1 Ответ

1 голос
/ 08 октября 2019

Это должно работать:

MATCH (parent)-[rel]->(child)
WHERE 'name2' IN rel.names 
SET rel.names = [x IN rel.names | CASE WHEN "name2" = x THEN "name5" ELSE x END]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...