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 的所有数字,但它对其他数组索引没那么有用。您可能希望在集合、索引操作上结合使用 +
运算符,可能还需要一些 extract
和 filter
。将这些结合起来基本上可以让你做任何你想做的事。以下是您可以执行的操作的一些示例。我使用 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);
所以,假设我有关系 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 的所有数字,但它对其他数组索引没那么有用。您可能希望在集合、索引操作上结合使用 +
运算符,可能还需要一些 extract
和 filter
。将这些结合起来基本上可以让你做任何你想做的事。以下是您可以执行的操作的一些示例。我使用 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);