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

Som*_*luk 59 database neo4j cypher

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

MATCH (n) OPTIONAL MATCH (n)-[r]-() DELETE n,r
Run Code Online (Sandbox Code Playgroud)

但是新创建的节点获取内部标识为({last node internal id} + 1).它不会重置为零.

我们怎样才能重置neo4j数据库,比如新创建的节点会将id设为0?

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

MATCH (n)
DETACH DELETE n
Run Code Online (Sandbox Code Playgroud)

Ste*_*ter 65

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

  • Neo4j 3.0是支持多个数据库的第一步 - 现在Neo4j安装可以托管多个graphdb,但仅限于同时运行其中一个.删除3.0中的数据库:`rm -rf data/databases/graph.db`(如果是名为`graph.db`的默认数据库). (9认同)
  • 我相信Neo4j 3.0中的文件结构发生了变化,现在所有数据文件都在根数据库目录下,而不是在数据文件夹中.现在我所做的是"rm -rf databaseFolder/*"来删除文件夹中的所有内容.首先,显然应该停止服务器. (2认同)
  • 请注意,在带有自制程序的macOS上,此文件位于系统文件夹中,例如/usr/local/Cellar/neo4j/3.1.1/libexec/data/databases (2认同)
  • 在 ubuntu 18.04 上,对于 neo4j 3.5,此文件夹位于 `/var/lib/neo4j/data/databases/graph.db` 中 (2认同)

Raj*_*ndo 29

运行这两个命令。

match (a) -[r] -> () delete a, r
Run Code Online (Sandbox Code Playgroud)

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

match (a) delete a
Run Code Online (Sandbox Code Playgroud)

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

  • 这不会删除我们为节点创建的属性。即使删除所有节点和关系后,我仍然可以看到属性仍然可用。有什么办法,我们也可以删除属性 (3认同)

Joy*_*nda 19

根据我的经验,有两种方法可以重置 Neo4j 数据库,具体取决于您的需要。

方法1:简单地删除所有节点/关系/索引/约束

在 Neo4j 浏览器中,或在 Py2neo 中使用graph.run()链接)。

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

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

然而,尽管很方便,但这种方法并不适合使用命令进行批量导入的情况neo4j-admin.bat import,即一次快速导入数百万个节点的理想选择。

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

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

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
Run Code Online (Sandbox Code Playgroud)

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

c:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\databases\neo4j
Run Code Online (Sandbox Code Playgroud)

c:\Users\[username]\AppData\Local\Neo4j\Relate\Data\dbmss\dbms-dd16c384-78c5-4c21-94f3-b0e63e6c4e06\data\transactions\neo4j
Run Code Online (Sandbox Code Playgroud)

然后执行导入命令:

"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
Run Code Online (Sandbox Code Playgroud)

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

在此输入图像描述

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


zak*_*mck 11

这对我有用。社区版的4.3.2:

  • 停止服务器
  • cd <neo home>
  • rm -Rf data/databases/* data/transactions/*
  • 重新启动服务器

现在您又拥有了系统和 neo4j DB。上面的命令也会删除系统数据库,这似乎是必要的,因为仅删除常规数据库(在社区版中只能是“neo4j”)会使系统数据库中的元数据不一致,并且您开始看到错误。

data/dbms似乎包含用户凭据,如果您想保留现有用户,您可以保留它(否则,您将返回到默认的 neo4j/test 用户)。

推荐的方法是使用DROPCREATECypher 命令,但是,这些命令仅在企业版中可用(我认为遗憾的是,像这样的基本功能是他们的高级产品的一部分,但仅此而已)。


小智 7

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

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


Aip*_*ipi 5

处理多个数据库。

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

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

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

1 - 切换到system数据库:

:use system
Run Code Online (Sandbox Code Playgroud)

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

SHOW DATABASES
Run Code Online (Sandbox Code Playgroud)

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

CREATE OR REPLACE DATABASE <name>
Run Code Online (Sandbox Code Playgroud)

  • 这个答案的问题是它不适用于社区版本。否则,这是一个很好的建议 (6认同)
  • 我在社区版本上也不走运,文档表明它只是企业版:https://neo4j.com/docs/cypher-manual/4.0/administration/databases/#administration-databases-create-database (3认同)

Ben*_*myn 5

根据Neo4j 的文档,对于 4.x 及更高版本,执行此操作(无需删除数据库本身)的最佳方法是使用该CALL { ... } IN TRANSACTIONS功能,尤其是对于大量数据。

要进一步优化,您首先要删除关系:

:auto MATCH ()-[r]->() 
CALL { WITH r 
DELETE r 
} IN TRANSACTIONS OF 50000 ROWS;
Run Code Online (Sandbox Code Playgroud)

接下来是节点:

:auto MATCH (n) 
CALL { WITH n 
DETACH DELETE n 
} IN TRANSACTIONS OF 50000 ROWS;
Run Code Online (Sandbox Code Playgroud)

:auto需要该部件来制作[transaction implicit (auto-commit transaction)][2],否则会抛出错误。