Пакетное изменение узлов в запросе шифра на основе регулярного выражения - PullRequest
0 голосов
/ 22 февраля 2019

У меня есть свойство на нескольких тысячах узлов в моей базе данных, которое фиксирует путь к файлу, например: dirA/dirB/dirC/file.Тем не менее, я неправильно установил для некоторых из них значение dirA/dirB/dirC/file/file.

С другой стороны, есть другие файлы, у которых правильно введены их пути.например: dirA/dirX/file.

Я пытаюсь обновить все узлы с ошибочными путями и не трогать узлы, которые имеют правильный путь в своем свойстве.

  1. Любые советы по правильному регулярному выражению для использования в этомcase?
  2. Как мне пакетно обработать их в cypher?

Я ожидаю, что мне следует использовать какой-то запрос в форме: match(x) where x.Path contains()

MERGE (n:Node {Path: < some regex here >})
SET n.Path = REPLACE(n.Path < remove the last part of the path >, < some regex>)
RETURN n 

1 Ответ

0 голосов
/ 23 февраля 2019

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

MATCH (n:Node)
WHERE n.Path =~ '.*(/[^/]*)\\1'
SET n.Path = apoc.text.replace(n.Path, '/[^/]*$', '')
RETURN n

Вы определенно не хотите использовать MERGE, так как вы не пытаетесь создать новые узлы.Предложение WHERE находит пути, заканчивающиеся одним и тем же элементом пути дважды (примечание: оператор =~ всегда совпадает со значением whole ), а функция APOC apoc.text.replace делает замену.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...