按 ID 删除节点的 Cypher 脚本是啥?

Posted

技术标签:

【中文标题】按 ID 删除节点的 Cypher 脚本是啥?【英文标题】:What's the Cypher script to delete a node by ID?按 ID 删除节点的 Cypher 脚本是什么? 【发布时间】:2015-03-24 13:10:38 【问题描述】:

在 SQL 中:

Delete From Person Where ID = 1;

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

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

【问题讨论】:

【参考方案1】:

假设您指的是 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

【讨论】:

您可以使用 DETACH DELETE 代替可选匹配 在这种情况下,“人”是什么?它是“名称”属性吗? 这只有在你不想删除()中的内容时才有效。【参考方案2】:

当节点是孤儿时。

Start n=node(1)
Delete n;

【讨论】:

【参考方案3】:

对于 id 为“x”的节点,最干净的扫描是

匹配 (n) 其中 id(n) = x 分离删除 n

https://neo4j.com/docs/cypher-manual/current/clauses/delete/#delete-delete-a-node-with-all-its-relationships

https://neo4j.com/docs/cypher-manual/current/functions/scalar/#functions-id

【讨论】:

【参考方案4】:

按照@saad-khan 提供的链接,这是获取节点和关系 ID 的示例。 下面的代码显示了 ID,因此您可以确保删除与给定 ID 相关的所有内容。

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

Ps.:“:HAS”是关系的一个例子。

【讨论】:

【参考方案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

【讨论】:

以上是关于按 ID 删除节点的 Cypher 脚本是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Cypher索引约束

Cypher 查询删除属性导致 neo4j-shell 中的内存不足错误

neo4j cypher 节点可以模糊匹配么

按_id删除文档不起作用[重复]

JavaScript按ID删除元素

如何在使用 cypher 使用 UNWIND 进行迭代时删除关系