我有一个节点,有一个列表属性。该列表可以包含多个类似的值:[“一个”、“两个”、“另一个财产”、“三个”]我的目标是找到属性中有一个或多个“something ...”值的所有节点,并将所有"something ..."属性替换为单个属性值“something”。[“某物”,“另一个财产”]在我看来,有两个问题:1.找到列表属性包含“something”的所有节点。1.用单个'something'值替换'something ...'的所有单个或多个示例。
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...'元素。
a9wyjsp72#
try ..
match (n:foo} where n.property<>replace(n.property,'something,'') return n
Neo4j中的replace函数使用正则表达式,它基于遍历。所以这是相当有效的,即使是大字符串。如果你使用split函数,你可以得到一个String[]并处理单个元素。
2条答案
按热度按时间50pmv0ei1#
这个逻辑可能对你有用:
它使用REDUCE函数来创建一个列表,该列表的第一个元素是'something',而没有任何其他的'something...'元素。
a9wyjsp72#
try ..
Neo4j中的replace函数使用正则表达式,它基于遍历。所以这是相当有效的,即使是大字符串。
如果你使用split函数,你可以得到一个String[]并处理单个元素。