首页 > 解决方案 > 如何用密码替换字符串数组中的条目

问题描述

我有一个像这样的字符串数组属性:

["name1", "name2", "name3", "name2", "name4"]

我想用“name5”替换这个数组中的“name2”:

["name1", "name5", "name3", "name5", "name4"]

到目前为止,我想出了这样的查询:

MATCH (parent)-[rel]->(child)
WHERE 'name2' IN rel.names 
SET rel.names = [x IN (rel.names+['name5']) WHERE x<>"name2"] 

这几乎是我想要的: ["name1", "name3", "name4", "name5"]

这个查询的问题很明显——它只是静态地添加了一次“name5”,而不检查“name2”在数组中的频率。例如,如果我有n 次“name2”,则查询只添加一个“name5”而不是 n 次。

如果没有“where 子句”,则查询会将“name5”添加到甚至不包含“name2”的数组中。正确的方法应该是查询应该找到 0 次“name2”并添加 0 次“name5”。所以不需要 where 部分。您将如何解决问题,我的解决方法是否正确?

标签: neo4jcypher

解决方案


这应该有效:

MATCH (parent)-[rel]->(child)
WHERE 'name2' IN rel.names 
SET rel.names = [x IN rel.names | CASE WHEN "name2" = x THEN "name5" ELSE x END]

推荐阅读