2014-10-03 89 views
0

如何删除所有深中的相关节点到主节点的一些属性,例如“Trojańska”的Neo4j删除所有深中的相关节点

CREATE (spol:Spoldzielnia { value : 'Poludnie' }) 
CREATE (mT:Home { value : 'Trojanska' }) 
CREATE (mR:Home { value : 'Renesansowa' }) 
CREATE (mK:Home { value : 'Kasandry' }) 
CREATE (pS:Person { value : 'Slawek' }) 
CREATE (pR:Person { value : 'Remek' }) 
CREATE (pW:Person { value : 'Wojtek' }) 
CREATE (pK:Person { value : 'Krzychu' }) 
CREATE (pB:Person { value : 'Bolek' }) 
CREATE (pC:Person { value : 'Czesław' }) 
CREATE (pTT:Person { value : 'Tosiek' }) 
CREATE (pZZ:Person { value : 'Zbychu' }) 
CREATE (pWW:Person { value : 'Wlodek' }) 
CREATE (pFF:Person { value : 'Franko' }) 
CREATE (pMM:Person { value : 'Mietek' }) 
CREATE (i01:Item { value : 'telefon'}) 
CREATE (i02:Item { value : 'komputer'}) 
CREATE (i03:Item { value : 'laptop'}) 
CREATE (i04:Item { value : 'telefon'}) 
CREATE (i05:Item { value : 'komputer'}) 
CREATE (i06:Item { value : 'laptop'}) 
CREATE (i07:hardware { value : 'modem'}) 
CREATE (i08:option { value : 'wifi'}) 
CREATE (i09:option { value : 'usb'}) 
CREATE (mT)-[:HAS]->(spol) 
CREATE (mR)-[:HAS]->(spol) 
CREATE (mK)-[:HAS]->(spol) 
CREATE (pS)-[:HAS]->(mT) 
CREATE (pR)-[:HAS]->(mT) 
CREATE (pW)-[:HAS]->(mT) 
CREATE (pK)-[:HAS]->(mR) 
CREATE (pB)-[:HAS]->(mR) 
CREATE (pC)-[:HAS]->(mR) 
CREATE (pTT)-[:HAS]->(mK) 
CREATE (pZZ)-[:HAS]->(mK) 
CREATE (pWW)-[:HAS]->(mK) 
CREATE (pFF)-[:HAS]->(mK) 
CREATE (pMM)-[:HAS]->(mK) 
CREATE (i01)-[:HAS]->(pS) 
CREATE (i02)-[:HAS]->(pS) 
CREATE (i03)-[:HAS]->(pS) 
CREATE (i04)-[:HAS]->(pR) 
CREATE (i05)-[:HAS]->(pR) 
CREATE (i06)-[:HAS]->(pR) 
CREATE (i07)-[:HAS]->(i02) 
CREATE (i08)-[:HAS]->(i07) 
CREATE (i09)-[:HAS]->(i06) 

例如我想删除有关“Trojanska”的所有节点和结果,我希望得到的东西是这样的:

Delete: Trojanska 
Delete: Trojanska -> Slawek 
Delete: Trojanska -> Slawek -> telefon 
Delete: Trojanska -> Slawek -> komputer 
Delete: Trojanska -> Slawek -> komputer -> modem 
Delete: Trojanska -> Slawek -> komputer -> modem -> wifi 
Delete: Trojanska -> Slawek -> laptop 
Delete: Trojanska -> Wojtek 
Delete: Trojanska -> Remek -> telefon 
Delete: Trojanska -> Remek -> komputer 
Delete: Trojanska -> Remek -> laptop 
Delete: Trojanska -> Remek -> laptop -> usb 

回答

1

首先没有级联的概念在新删除(或至少我不认为有),所以你必须手动执行它。使用我昨天设置相同Console我跑查询:

MATCH (h:Home { value:"Trojanska" })<-[rs:HAS*]-(x) 
FOREACH (r IN rs | 
    DELETE r) 
DELETE x 

你要删除的关系,然后才能删除它是什么在foreach循环中完成的,则目标节点X的节点。

不认为你可以返回的路径,但这似乎工作,并产生一些你需要的输出(假设你总是会使用value标注任何类型的节点):

MATCH p=(h:Home { value:"Trojanska" })<-[rs:HAS*]-(x) 
WITH p, x, EXTRACT(x IN NODES(p)| x.value) AS nodes 
FOREACH (n IN rels(p)| 
    DELETE n) 
DELETE x 
RETURN nodes 

基本上所有这些都是使用Extract函数将字符串值拉出到一个数组中,然后您可以返回字符串与其源节点(已被删除)绑定。

相关问题