Reputation: 291
How to delete all deep related nodes to the main node with some attribute for example "Trojańska"
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)
example i want to delete all nodes related to the 'Trojanska' and the result I wanted to get something like this:
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
Upvotes: 1
Views: 145
Reputation: 3739
Firstly there is no concept of cascading delete in Neo (or at least I don't think that there is) so you have to perform it manually. Using the same Console that I set up yesterday I ran the query:
MATCH (h:Home { value:"Trojanska" })<-[rs:HAS*]-(x)
FOREACH (r IN rs |
DELETE r)
DELETE x
You have to delete the relationships before you can delete the Nodes which is what is done in the FOREACH loop, then the target Node x.
I did not think you could return the paths, but this appears to work and produce something like your desired output (assumes you will always use value
to label a node of any type):
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
Essentially all this does extra is use the Extract function to pull out a String value into an array which you can then return as the Strings are not tied to their source nodes (which have been deleted).
Upvotes: 1