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
然后重新启动服务器.此过程完全擦除您的数据,因此请小心处理.
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)
它将删除没有关系的节点。
Joy*_*nda 19
根据我的经验,有两种方法可以重置 Neo4j 数据库,具体取决于您的需要。
在 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
,即一次快速导入数百万个节点的理想选择。
当数据库不为空时,无法批量导入。我尝试了上面的方法,但仍然收到错误:
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 用户)。
推荐的方法是使用DROP
或CREATE
Cypher 命令,但是,这些命令仅在企业版中可用(我认为遗憾的是,像这样的基本功能是他们的高级产品的一部分,但仅此而已)。
小智 7
此命令会删除所有内容,但需要安装 apoc:
CALL apoc.periodic.iterate('MATCH (n) RETURN n', 'DETACH DELETE n', {batchSize:1000})
处理多个数据库。
最后一个管理差异是如何完全清除一个数据库而不影响具有多个数据库的整个实例。在处理单个实例和单个数据库的方法时,用户可以删除整个实例并重新开始。但是,对于多个数据库,我们无法做到这一点,除非我们愿意在这种情况下从其他数据库中丢失所有内容。该方法类似于其他 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)
根据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]
,否则会抛出错误。