从数组中删除特定元素

时间:2015-08-11 23:44:26

标签: neo4j cypher

我想使用Cypher从节点上的数组属性中删除元素。

我知道要删除的元素的值,但不知道它的索引。

e.g。假设我有一个类似

的节点
({some_array: ["apples", "oranges"]})

我想要一个类似(伪代码)的查询:

MATCH (n)
REMOVE "oranges" IN n.some_array

3 个答案:

答案 0 :(得分:12)

Cypher没有变异数组的功能,但您可以使用FILTER创建一个删除了"oranges"的新数组:

MATCH (n)
WHERE HAS(n.some_array)
SET n.array = FILTER(x IN n.some_array WHERE x <> "oranges");

答案 1 :(得分:1)

有时我们可以在上面的查询中得到一个错误,“每个查询只需要一个语句但得到:2” 要删除它,我们也可以用作

match (t:test) 
with t,FILTER(x IN t.some_array WHERE x <> "ORANGES") as filterdList
set t.array=filterdList
return t

答案 2 :(得分:0)

不推荐使用 FILTER 函数:

https://neo4j.com/docs/cypher-manual/current/functions/list/#functions-filter

他们考虑改为使用[variable IN list WHERE谓词]。您只需要用方括号删除filter():

MATCH (n)
WHERE HAS(n.some_array)
SET n.array = [x IN n.some_array WHERE x <> "oranges"];

在我的情况下效果很好