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

mcvgt66p  于 2022-11-05  发布在  其他
关注(0)|答案(8)|浏览(1325)

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

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

但新创建的节点的内部id为({last node internal id} + 1),不会重置为零。
我们如何重置neo4j数据库,如新创建的节点将获得id为0?
在Python 2.3中,我们可以删除所有具有关系的节点,

MATCH (n)
DETACH DELETE n
hm2xizp9

hm2xizp91#

关闭Neo4j服务器,执行rm -rf data/graph.db,然后再次启动服务器。此过程将彻底清除您的数据,因此请小心处理。

sigwle7e

sigwle7e2#

请运行两个命令。

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

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

match (a) delete a

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

yqkkidmi

yqkkidmi3#

处理多个数据库。
根据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>
ubby3x7f

ubby3x7f4#

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

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

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


# 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 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

然后执行Import命令:

"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)和导入到的数据库是相同的。

mrwjdhj3

mrwjdhj35#

此命令删除所有内容,但要求安装apoc:
调用apoc.周期.迭代('MATCH(n)RETURN n','DETACH DELETE n',{批处理大小:1000})

mwecs4sa

mwecs4sa6#

这对我在社区版4.3.2版中起作用:

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

现在你又看到了系统和neo4j数据库。上面的命令也删除了系统数据库,这看起来是必要的,因为只删除常规数据库(在社区版中只能是'neo4j')会使系统数据库中的元数据不一致,你会看到错误。
data/dbms似乎包含用户凭据,如果您希望保留现有用户,则可以保留它(否则,您将返回到默认的neo4j/test用户)。
推荐的方法是使用DROPCREATE Cypher命令,然而,这些命令仅在企业版中可用(我认为这是一个遗憾,像这样的基本功能是他们的高级产品的一部分,但仅此而已)。

lg40wkob

lg40wkob7#

如果您在Docker容器上使用它,则可以执行以下操作
docker-compose rm -f -s -v myNeo4jService

rjee0c15

rjee0c158#

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

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

有些人可能会说数据库名称被更改了,但在撰写本文[2018-12]时,neo4j并不支持多个数据库示例,我们没有必要区分数据库,因此代码中没有使用数据库的名称。

相关问题