Neo4j -将字符串列表属性中的多个值替换为单个值

xriantvc  于 2023-10-18  发布在  其他
关注(0)|答案(2)|浏览(144)

我有一个节点,有一个列表属性。该列表可以包含多个类似的值:
[“一个”、“两个”、“另一个财产”、“三个”]
我的目标是找到属性中有一个或多个“something ...”值的所有节点,并将所有"something ..."属性替换为单个属性值“something”。
[“某物”,“另一个财产”]
在我看来,有两个问题:
1.找到列表属性包含“something”的所有节点。
1.用单个'something'值替换'something ...'的所有单个或多个示例。

50pmv0ei

50pmv0ei1#

这个逻辑可能对你有用:

MATCH (n:Foo)
WHERE ANY(x IN n.list WHERE x STARTS WITH 'something')
SET n.list =
  REDUCE(s = ['something'], t IN n.list | CASE WHEN t STARTS WITH 'something' THEN s ELSE s + t END )

它使用REDUCE函数来创建一个列表,该列表的第一个元素是'something',而没有任何其他的'something...'元素。

a9wyjsp7

a9wyjsp72#

try ..

match (n:foo} where n.property<>replace(n.property,'something,'') return n

Neo4j中的replace函数使用正则表达式,它基于遍历。所以这是相当有效的,即使是大字符串。
如果你使用split函数,你可以得到一个String[]并处理单个元素。

相关问题