我们可以通过以下查询删除所有节点和关系。
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
我们可以通过以下查询删除所有节点和关系。
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
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
Answers:
关闭Neo4j服务器,执行arm -rf data/graph.db
并再次启动服务器。此过程将完全擦除您的数据,因此请谨慎处理。
rm -rf data/databases/graph.db
如果默认数据库名为graph.db
)。
/var/lib/neo4j/data/databases/graph.db
用于neo4j 3.5
运行两个命令。
match (a) -[r] -> () delete a, r
上面的命令将删除所有具有关系的节点。然后运行
match (a) delete a
它将删除没有关系的节点。
处理多个数据库。
最后一个管理上的区别是如何在不影响具有多个数据库的整个实例的情况下完全清除一个数据库。在处理单个实例和单个数据库方法时,用户可以删除整个实例并重新开始。但是,对于多个数据库,除非在这种情况下我们能够轻松地从其他数据库中丢失所有内容,否则我们将无法做到这一点。该方法类似于其他DBMS,我们可以删除并重新创建数据库,但保留其他所有内容。Cypher的命令是
CREATE OR REPLACE DATABASE <name>
。这将创建数据库(如果尚不存在)或将现有数据库替换为干净的数据库。
启动neo4j时,可以访问两个数据库,一个system
数据库和一个默认(neo4j
)数据库。清除/重置neo4j
数据库:
1-切换到system
数据库:
:use system
2-显示使用实例创建的所有数据库:
SHOW DATABASES
3-运行命令以清除数据库。
CREATE OR REPLACE DATABASE <name>
如果在docker容器上使用它,则可以执行
docker-compose rm -f -s -v myNeo4jService
由于neo4j仅运行conf文件中指定的当前数据库,因此启动新的干净数据库的一种简单方法是更改neo4j.conf文件中的当前数据库,然后重新启动neo4j服务器。
dbms.active_database=graph.db --> dbms.active_database=graph2.db
有人可能会争辩说数据库名称已更改。但是在撰写本文时[2018-12],neo4j不支持多个数据库实例。无需区分数据库,因此在我们的代码中未使用数据库的名称。
以我的经验,有两种方法可以根据需要重置Neo4j数据库。
在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导入的情况,即理想的是一次快速导入数百万个节点。
数据库不为空时,无法批量导入。我尝试了上述方法,但仍然收到错误:
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)和导入到的数据库相同。
MATCH (n) DETACH DELETE n
。