如何重设/清除/删除neo4j数据库?


73

我们可以通过以下查询删除所有节点和关系。

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

但是新创建的节点的内部ID为({last node internal id} + 1)。它不会重置为零。

我们如何重置neo4j数据库,例如新创建的节点将获得id为0?

从2.3版开始,我们可以删除所有具有关系的节点,

MATCH (n)
DETACH DELETE n

6
从Neo4j 2.3开始,您可以选择使用MATCH (n) DETACH DELETE n
Stefan Armbruster

3
MATCH (n) DETACH DELETE n 当有许多节点时,该应用程序将严重失败: There is not enough memory to perform the current task. Please try increasing 'dbms.memory.heap.max_size' in the neo4j configuration (normally in 'conf/neo4j.conf' or, if you you are using Neo4j Desktop, found through the user interface) or if you are running an embedded installation increase the heap by using '-Xmx' command line flag, and then restart the database
Marco Ancona

Answers:


81

关闭Neo4j服务器,执行arm -rf data/graph.db并再次启动服务器。此过程将完全擦除您的数据,因此请谨慎处理。


3
我相信Neo4j 3.0中的文件结构已更改,现在所有数据文件都位于根数据库目录下,而不是数据文件夹中。现在,我要做的是“ rm -rf databaseFolder / *”来删除文件夹中的所有内容。显然,首先应该停止服务器。
melis 2016年

10
Neo4j 3.0是支持多个数据库的第一步-目前,Neo4j安装可以承载多个graphdb,但仅限于同时运行其中的一个。要在3.0中删除数据库:(rm -rf data/databases/graph.db如果默认数据库名为graph.db)。
Stefan Armbruster

2
请注意,在带有自制软件的macOS上,此文件位于系统文件夹中,例如/usr/local/Cellar/neo4j/3.1.1/libexec/data/databases
Colin D

2
在ubuntu 18.04上,此文件夹/var/lib/neo4j/data/databases/graph.db用于neo4j 3.5
unlockme

1
@StefanArmbruster无法使用neo4j 4.0+提出您的建议。因此,我找到了一种解决方法,并在下面提出另一个建议。
艾比(Aipi)

17

运行两个命令。

match (a) -[r] -> () delete a, r

上面的命令将删除所有具有关系的节点。然后运行

match (a) delete a

它将删除没有关系的节点。


这不会删除我们为节点创建的属性。即使删除了所有节点和关系,我仍然可以看到属性。有什么办法,我们也可以删除属性
Hema Chandran

2

处理多个数据库。

根据Neo4j管理多个数据库文档

最后一个管理上的区别是如何在不影响具有多个数据库的整个实例的情况下完全清除一个数据库。在处理单个实例和单个数据库方法时,用户可以删除整个实例并重新开始。但是,对于多个数据库,除非在这种情况下我们能够轻松地从其他数据库中丢失所有内容,否则我们将无法做到这一点。该方法类似于其他DBMS,我们可以删除并重新创建数据库,但保留其他所有内容。Cypher的命令是CREATE OR REPLACE DATABASE <name>。这将创建数据库(如果尚不存在)或将现有数据库替换为干净的数据库。

启动neo4j时,可以访问两个数据库,一个system数据库和一个默认(neo4j)数据库。清除/重置neo4j数据库:

1-切换到system数据库:

:use system

2-显示使用实例创建的所有数据库:

SHOW DATABASES

3-运行命令以清除数据库。

CREATE OR REPLACE DATABASE <name>

2
这个答案的问题是不适用于社区版本。否则,这是一个很好的建议
EnriqueOrtuño20年

@EnriqueOrtuño它在社区版本中为我工作!但是,存在一个问题,如果我尝试两次以上,它将破坏我的数据库。我打算在Github中报告这一麻烦。
艾比

3
没有运气,我在社区版两种,文档仅表示它的企业:neo4j.com/docs/cypher-manual/4.0/administration/databases/...
开方

2

此命令删除所有内容,但需要安装apoc:

致电apoc.periodic.iterate('MATCH(n)RETURN n','DETACH DELETE n',{batchSize:1000})


1

如果在docker容器上使用它,则可以执行

docker-compose rm -f -s -v myNeo4jService


2
如果您正在使用数据库的外部卷装载,则不会。如果不是这样,那么只需重新启动Docker容器将导致一个全新的状态。
OneCricketeer

@ cricket_007您能详细说明“重新启动”吗?
乔丹·莫里斯

删除并启动Docker容器并不会清除安装在外部卷上的数据库。.我只是想对答案进行澄清
OneCricketeer 18-4-6

1

由于neo4j仅运行conf文件中指定的当前数据库,因此启动新的干净数据库的一种简单方法是更改​​neo4j.conf文件中的当前数据库,然后重新启动neo4j服务器。

dbms.active_database=graph.db --> dbms.active_database=graph2.db

有人可能会争辩说数据库名称已更改。但是在撰写本文时[2018-12],neo4j不支持多个数据库实例。无需区分数据库,因此在我们的代码中未使用数据库的名称。


0

以我的经验,有两种方法可以根据需要重置Neo4j数据库。

方法1:只需删除所有节点/关系/索引/约束

在Neo4j浏览器中,或在带有graph.run()link)的Py2neo中。

# All nodes and relationships.
MATCH (n) DETACH DELETE n

# All indexes and constraints.
CALL apoc.schema.assert({},{},true) YIELD label, key RETURN *

但是,尽管方便,但此方法不适用于将命令neo4j-admin.bat import用于BULK导入的情况,即理想的是一次快速导入数百万个节点

方法2:为BULK导入工具重置数据库

数据库不为空时,无法批量导入。我尝试了上述方法,但仍然收到错误:

Import error: C:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j already contains data, cannot do import here
Caused by:C:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j already contains data, cannot do import here
java.lang.IllegalStateException: C:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j already contains data, cannot do import here

为解决此问题,我删除了以下文件夹:

c:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j

c:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\transactions\neo4j

然后执行导入命令:

"C:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\bin\neo4j-admin.bat" import --database=neo4j --multiline-fields=true --nodes=node_ABC.csv --nodes=node_XYZ.csv relationships=relationship_LMN.csv --relationships=relationship_UIO.csv

启动Neo4j数据库。在Neo4j Desktop中,标签和关系现在应该可以识别了。

在此处输入图片说明

请注意,我删除的数据库(neo4j)和导入到的数据库相同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.