Neo4j中关系属性的数组替换

Neo4j中关系属性的数组替换,neo4j,graph-databases,Neo4j,Graph Databases,假设我与属性r.myarray有关系: [1,2,3,4,5,6,7] 我需要编写一个查询,用另一个数组替换数组中的项(最多一个,包括保证在数组中的任意成员(在本例中为3个)),比如: [6,12,13] 要获得结果,请执行以下操作: [6,12,13,4,5,6,7] 我已经看到可以使用数组的范围或子集表示法(例如r.myarray[0..x])来指定数组的一部分,理论上可以设置为用第一个数组加第二个子集(r.myarray[x..r.myarray.length]或类似的东西)替换数组

假设我与属性r.myarray有关系:

[1,2,3,4,5,6,7]
我需要编写一个查询,用另一个数组替换数组中的项(最多一个,包括保证在数组中的任意成员(在本例中为3个)),比如:

[6,12,13]
要获得结果,请执行以下操作:

[6,12,13,4,5,6,7]
我已经看到可以使用数组的范围或子集表示法(例如r.myarray[0..x])来指定数组的一部分,理论上可以设置为用第一个数组加第二个子集(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]));

范围可能不是你想要的<代码>范围生成一组数字。它有利于循环,比如如果您想遍历1-10之间的所有数字,但对于其他数组索引来说就没有那么大的用处了。您可能希望在集合、索引操作上结合使用
+
运算符,可能还需要少量的
提取
过滤器
。把这些结合起来,你基本上可以随心所欲。下面是一些你可以做的事情的例子。我使用
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);

但是我如何做数组差异,或者如何找到数组中最后一个不可接受项(3)的索引呢?我尝试了以下方法:启动r=relationship(726)返回过滤器(y在r.myarray中,其中(y不在[718]);但它给了我一个错误,“NOT”中的“N”是意外的。啊-where NOT(y在[718]中)。知道了!