Neo4j 中关系 属性 的数组替换

Array replacement on relationship property in Neo4j

所以,假设我有关系 r,属性 r.myarray:

[1,2,3,4,5,6,7]

我需要编写一个查询来替换数组中的项目——最多包括一个保证在数组中的任意成员(在这种情况下假设 3)——用另一个数组——假设:

[6,12,13]

得到结果:

[6,12,13,4,5,6,7]

据我所知,您可以对数组使用 RANGE 或子集表示法(例如 r.myarray[0..x])来指定数组的一部分,并且理论上可以使用 SET 来替换具有第一个数组加上第二个子集的数组(r.myarray[x..r.myarray.length],或类似的东西)。不过,我距离这里的完整答案还有半英里。

编辑:最终的可插值查询:

START r=relationship(726)
SET r.myarray = [1,2,3,4] + filter(y in r.ancestors where NOT (y IN [718]));

范围可能不是您想要的。 Range 生成一组数字。这对循环很有用,比如你想遍历 1-10 的所有数字,但它对其他数组索引没那么有用。您可能希望在集合、索引操作上结合使用 + 运算符,可能还需要一些 extractfilter。将这些结合起来基本上可以让你做任何你想做的事。以下是您可以执行的操作的一些示例。我使用 WITH 子句只是为了显示数据样本,您当然可以在任何节点上执行此操作 属性:

/* Return only the first three items */
with [1,2,3,4,5,6,7] as arr return arr[0..3];

/* Cut out the 4th item, otherwise return everything */
with [1,2,3,4,5,6,7] as arr return arr[0..3] + arr[4..];

/* Return only the even numbers */
with [1,2,3,4,5,6,7] as arr 
return filter(y in 
     extract(x in arr | case when (x % 2 = 0) then x end) where y > 0);