删除节点的Cypher脚本是什么?

41

在 SQL 中:

Delete From Person Where ID = 1;

在 Cypher 中,通过 ID 删除一个节点的脚本是什么?

(编辑说明:ID = Neo4j 的内部节点 ID)

5个回答

66
假设你正在指的是Neo4j的内部节点ID:
MATCH (p:Person) where ID(p)=1
OPTIONAL MATCH (p)-[r]-() //drops p's relations
DELETE r,p
如果你指的是节点上自己属性的'id':
 MATCH (p:Person {id:1})
 OPTIONAL MATCH (p)-[r]-() //drops p's relations
 DELETE r,p

10
您可以使用DETACH DELETE而不是可选匹配。 - barakcaf
在这种情况下,“Person”是什么?它是“name”属性吗? - Nom1fan
只有在您不想删除()中的内容时,此方法才有效。 - arturvt


5

这是一个旧问题并已有答案,但是当需要删除具有关系的节点时,请使用DETACH

MATCH (n) where ID(n)=<your_id> 
DETACH DELETE n

否则您会得到以下结果:

Neo.ClientError.Schema.ConstraintValidationFailed: Cannot delete node<21>, because it still has relationships. To delete this node, you must first delete its relationships.

这就像SQL中的CASCADE


2
当节点是孤儿节点时。
Start n=node(1)
Delete n;

1

在@saad-khan提供的链接中,下面是一个获取节点和关系ID的示例代码。

MATCH (node)-[relation:HAS]->(value) where ID(node)=1234 RETURN ID(instance), ID(value), ID(r)

注:":HAS"是关系的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接