2013-11-09 28 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; 

不会返回任何东西,如果第二节比赛没有找到任何路径