2015-03-30 50 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