我想使用Cypher从节点上的数组属性中删除元素。
我知道要删除的元素的值,但不知道它的索引。
e.g。假设我有一个类似
的节点({some_array: ["apples", "oranges"]})
我想要一个类似(伪代码)的查询:
MATCH (n)
REMOVE "oranges" IN n.some_array
答案 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"];
在我的情况下效果很好