我知道有很多类似的问题。但似乎答案无法解决我的问题。 我有一个非常大的图表,大约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
我放弃了。我想我最好删除我文件夹中的所有文件。这对我来说很简单。
答案 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.