2015-03-30 32 views
3

所以,让我们说我有关系R,财产r.myarray:阵列更换的关系属性中的Neo4j

[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]或类似的东西)。尽管如此,我从这里获得了完整的答案大约半英里。

编辑:最后,interpolat-能够查询:

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

回答

2

范围可能不是你想要的。 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); 
+0

但我怎么做或者阵列不同,或者找到的最后一个不可接受的项目的索引(3)在数组中? – djvs 2015-03-31 01:39:24

+0

我试过这个:START r = relationship(726) return filter(y in r.myarray where(y NOT IN [718]));但它给了我一个错误,“不”中的“N”意外。 – djvs 2015-03-31 01:40:32

+1

啊 - 其中NO​​T(y在[718])。得到它了! – djvs 2015-03-31 01:44:36