Deleting data
In a Neo4j database you can delete:
-
nodes
-
relationships
-
properties
-
labels
To delete any data in the database, you must first retrieve it, then you can delete it. You have already learned how to remove or delete properties from nodes or relationships.
Deleting a node
Suppose you have created a Person node for Jane Doe.
Run this Cypher code to create the node:
MERGE (p:Person {name: 'Jane Doe'})
You delete this node as follows where you first retrieve the node. Then with a reference to the node you can delete it.
MATCH (p:Person {name: 'Jane Doe'})
DELETE p
Deleting a relationship
Suppose we had our Jane Doe node again where she was added as an actor in the movie, The Matrix. Run this code to create the node and the relationship.
MATCH (m:Movie {title: 'The Matrix'})
MERGE (p:Person {name: 'Jane Doe'})
MERGE (p)-[:ACTED_IN]->(m)
RETURN p, m
This code creates one node and the relationship from Jane Doe to The Matrix.
To leave the Jane Doe node in the graph, but remove the relationship we retrieve the relationship and delete it.
MATCH (p:Person {name: 'Jane Doe'})-[r:ACTED_IN]->(m:Movie {title: 'The Matrix'})
DELETE r
RETURN p, m
Run this Cypher code that recreates the relationship:
MATCH (p:Person {name: 'Jane Doe'})
MATCH (m:Movie {title: 'The Matrix'})
MERGE (p)-[:ACTED_IN]->(m)
RETURN p, m
If we attempt to delete the Jane Doe node, we will receive an error because it has relationships in the graph.
Try running this Cypher code:
MATCH (p:Person {name: 'Jane Doe'})
DELETE p
You should receive an error. Neo4j prevents orphaned relationships in the graph.
Deleting a node and its relationships
Neo4j provides a feature where you cannot delete a node if it has incoming or outgoing relationships. This prevents the graph from having orphaned relationships.
Run this Cypher code:
MATCH (p:Person {name: 'Jane Doe'})
DETACH DELETE p
This code deletes the relationship and the Person node.
You can also delete all nodes and relationships in a database with this code.
MATCH (n)
DETACH DELETE n
Deleting labels
A best practice is to have at least one label for a node.
Run this Cypher code to create this Person node in the graph:
MERGE (p:Person {name: 'Jane Doe'})
RETURN p
Next, run this code to add a new label to this node:
MATCH (p:Person {name: 'Jane Doe'})
SET p:Developer
RETURN p
To remove the newly-added label, Developer, you use the REMOVE
clause. Run this code:
MATCH (p:Person {name: 'Jane Doe'})
REMOVE p:Developer
RETURN p
The Jane Doe node has two labels, Person and Developer. You can use a MATCH
to find that node.
Note that you could have specified MATCH (p:Developer {name: 'Jane Doe'})
or MATCH (p:Person:Developer {name: 'Jane Doe'})
to find the same node.
Once we have a reference to that node, we can remove the label with the REMOVE
clause.
And finally, delete the Jane Doe node by running this code:
MATCH (p:Person {name: 'Jane Doe'})
DETACH DELETE p
Note that DELETE p
would also work in this case since we have not created any relationships.
What labels exist in the graph?
You can find out what labels exist in the graph with this code:CALL db.labels()
Check your understanding
1. Delete an existing node in the graph
Suppose we’ve decided that we do not want the actor River Phoenix in our database who may have relationships to movies in our database.
Complete the code below for removing this actor from the database.
Use the dropdown below complete the code.
MATCH (p:Person {name: 'River Phoenix'})
/*select:DELETE p*/
-
❏
DELETE p
-
❏
REMOVE p
-
✓
DETACH DELETE p
Once you have selected your option, click the Check Results query button to continue.
Hint
You must delete relationships then the node.
Solution
DETACH DELETE p
is the correct answer.
If you were to attempt DELETE p
, it would fail because it has relationships and Cypher prevents you from deleting nodes without first deleting its relationships.
There is no REMOVE p
clause in Cypher.
2. Cleaning up graph
Which Cypher code deletes all nodes and relationships from the graph?
-
✓
MATCH (n) DETACH DELETE n
-
❏
DELETE NODES, RELATIONSHIPS
-
❏
MATCH (n) DELETE n
-
❏
DELETE ALL
Hint
Which code retrieves all nodes in the graph? You must delete the nodes safely by deleting the relationships first.
Solution
MATCH (n) DETACH DELETE n
is the correct answer as it first deletes relationships to/from a node, then the node.
MATCH (n) DELETE n
will fail because you cannot delete nodes without first deleting the relationships.
There are no such clauses DELETE NODES, RELATIONSHIPS
and DELETE ALL
in Cypher.
Summary
In this lesson, you learned how to delete nodes and relationships from the graph. In the next challenge, you will demonstrate that you can delete a node from the graph.