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

时间:2014-04-26 11:20:26

标签: database neo4j cypher

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

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

7 个答案:

答案 0 :(得分:59)

关闭Neo4j服务器,执行rm -rf data/graph.db并重新启动服务器。此过程会完全擦除您的数据,因此请小心处理。

答案 1 :(得分:17)

运行两个命令。

<Head>

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

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

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

答案 2 :(得分:2)

处理多个数据库。

根据Neo4j manage multiple databases documentation

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

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

1-切换到system数据库:

:use system

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

SHOW DATABASES

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

CREATE OR REPLACE DATABASE <name>

答案 3 :(得分:2)

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

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

答案 4 :(得分:0)

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

docker-compose rm -f -s -v myNeo4jService

答案 5 :(得分:0)

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

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

有些人可能会争辩说数据库名称已更改。但是从我的个人经验来看,在处理neo4j的代码中无需指定数据库名称。

答案 6 :(得分: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进行批量导入的情况,即理想地一次迅速一次导入数百万个节点。

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

当数据库非空时,无法BULK import。我尝试了上述方法,但仍然收到错误:

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中,现在应该可以识别标签和关系了。

enter image description here

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