向数组中添加值(如果还不存在)

J.J*_*J.J 4 neo4j cypher

我想向数组添加一个值(如果尚未存在)。到目前为止,我的代码看起来像这样(请注意r.names和{name}都是数组和[1] + [2] = [1,2]):

MERGE (r:resource {hash:{hash}})
ON CREATE SET r.names = {name}
ON MATCH SET r.names = r.names + {name}
Run Code Online (Sandbox Code Playgroud)

但是显然,如果{name}已经在r.names,它将再次被添加。{name}仅在r.names尚未包含的情况下如何添加?

Ste*_*ter 6

我猜您需要使用FOREACH+ CASE WHEN技巧:使用a时,case when您可以使用1元素数组(如果您的条件为true)或0元素数组,否则将用作迭代器FOREACHFOREACH不能在ON MATCHON CREATE处理程序中使用,因此我们将其放在后面,MERGE并使用a coalesce来覆盖r.names尚不存在的情况:

MERGE (r:Resource {hash:{hash}})
FOREACH(x in CASE WHEN {name} in r.names THEN [] ELSE [1] END | 
   SET r.names = coalesce(r.names,[]) + {name}
)
RETURN r.names
Run Code Online (Sandbox Code Playgroud)