2014-10-03 57 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函數將字符串值拉出到一個數組中,然後您可以返回字符串與其源節點(已被刪除)綁定。

相關問題