如何删除neo4j中的所有节点和所有关系

时间:2015-11-05 09:03:06

标签: neo4j

我知道有很多类似的问题。但似乎答案无法解决我的问题。 我有一个非常大的图表,大约1百万个节点和300万个关系。当我尝试使用以下语句删除它们时:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

然后服务器崩溃了。好的,我添加了LIMIT:

MATCH (n)
OPTIONAL MATCH (n)-[r]-()
WITH n,r LIMIT 1000000
DELETE n,r

服务器不会崩溃,会出现异常:

org.neo4j.kernel.api.exceptions.TransactionFailureException: Node record Node[1578965,used=false,rel=662269,prop=-1,labels=Inline(0x0:[]),light] still has relationships

我猜 LIMIT 1000000 会停止我对关系的删除。然后它转向删除节点。这导致了这个例外。我对吗?因为我不太了解 LIMIT 1000000 的过程。

那我该怎么办?每次我需要清除图表时,我不想删除数据库文件。设置更大的内存空间可能会有所帮助,但我的图表的大小也可能会变大。崩溃最终会发生。

感谢您的回复。我试过你的方法。 “Neo.DatabaseError.Statement.ExecutionFailure”异常将在我第二次运行语句时显示:

MATCH (n)
WITH n LIMIT 1000000
DETACH DELETE n

或本声明:

MATCH ()-[r]-()
WITH r
LIMIT 1000000
DELETE r

我放弃了。我想我最好删除我文件夹中的所有文件。这对我来说很简单。

3 个答案:

答案 0 :(得分:5)

在Neo4j 2.3上你可以使用

MATCH (n)
WITH n LIMIT 1000000
DETACH DELETE n

否则,您可以尝试按节点进行限制(仅当每个单独节点没有大量关系时才有效):

MATCH (n)
WITH n LIMIT 1000000
OPTIONAL MATCH (n)-[r]-()
DELETE n,r

答案 1 :(得分:4)

您可以做的是首先删除关系,然后删除节点。

关系

MATCH ()-[r]-()
WITH r
LIMIT 1000000
DELETE r

节点

MATCH (n)
WITH n
LIMIT 1000000
DELETE n

答案 2 :(得分:0)

首先删除与以下对象的所有关系:

  

开始r = relationship(*)删除r;

并删除所有节点:

MATCH (n) WITH n LIMIT 1000000 DETACH DELETE n.