2013-11-09 30 views
0

我是neo4j的新手。對於我的要求,我需要獲取id(收集)列表並刪除相同查詢中的節點。neo4j查詢與收集和刪除條款問題

在下面的查詢中,當我只返回id時,我得到正確的結果,即; 2個IDS

START n=node:galleryid(galleryid='f0666ac5-9f61-4431-80b1-c9719ef8c1f9') 
MATCH n-[rels*1..]->p 
WITH n, rels, p, collect(p.photouniqueid) as photoids 
RETURN photoids; 

預期,並得到了它的結果:["3dcd792b-9eed-4a74-826a-6801c9f2b707"] ["e5c91a60-41cf-4afb-8aa6-49a4af00dd38"]

但是,當我嘗試刪除條款追加到查詢我只得到了IDS的一個。

START n=node:galleryid(galleryid='f0666ac5-9f61-4431-80b1-c9719ef8c1f9') 
MATCH n-[rels*1..]->p WITH n, rels, p, collect(p.photouniqueid) as photosid 
FOREACH(rel IN rels: DELETE rel) 
DELETE p 
WITH n, photosid 
MATCH n<-[r]-() 
DELETE n, r 
RETURN photosid; 

Result - ["3dcd792b-9eed-4a74-826a-6801c9f2b707"] 
==> 1 row 
==> Nodes deleted: 3 
==> Relationships deleted: 3 

有人可以請建議第二個查詢有什麼問題嗎?謝謝您的幫助。

+0

你可能在兩者之間是需要爲下一場比賽刪除關係。嘗試彙總您事先需要的結果。 –

回答

1

試試這個:

START n=node:galleryid(galleryid='f0666ac5-9f61-4431-80b1-c9719ef8c1f9') 
MATCH n-[rels*1..]->p 
WITH n, collect(path as paths) collect(p.photouniqueid) as photosid 
FOREACH(p IN paths: 
    FOREACH(r in rels(p) : DELETE rel) 
    FOREACH(x in tail(nodes(p)) : DELETE x) 
) 
WITH n, photosid 
MATCH n<-[r]-() 
DELETE n, r 
RETURN photosid; 

不會返回任何東西,如果第二節比賽沒有找到任何路徑