基于正则表达式批量修改密码查询中的节点

时间:2019-02-22 20:45:12

标签: regex neo4j cypher

我在数据库中的数千个节点上都有一个属性,该属性捕获文件的路径,例如:dirA/dirB/dirC/file。但是,我错误地将其中一些设置为 dirA/dirB/dirC/file/file

另一方面,还有其他文件的路径正确输入。 例如:dirA/dirX/file

我正在尝试更新所有路径错误的节点,而不接触属性上具有正确路径的节点。

  1. 在这种情况下使用正确的正则表达式的任何提示吗?
  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 :(得分:0)

这应该有效:

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

您绝对不希望使用MERGE,因为您没有尝试创建新节点。 WHERE子句查找以相同路径元素结尾两次的路径(注意:=~运算符始终与 entire 值匹配),以及APOC函数apoc.text.replace进行替换。