我在数据库中的数千个节点上都有一个属性,该属性捕获文件的路径,例如:dirA/dirB/dirC/file
。但是,我错误地将其中一些设置为
dirA/dirB/dirC/file/file
。
另一方面,还有其他文件的路径正确输入。
例如:dirA/dirX/file
。
我正在尝试更新所有路径错误的节点,而不接触属性上具有正确路径的节点。
我希望我应该使用以下形式的查询:
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
答案 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进行替换。