我想删除我的Neo4j数据库中特殊的“根”节点。
我已经在其中找到了一些问题/答案,但由于不同的原因,它们是没有用的。
我们使用db:数据库节点将租户数据存储在Neo4j中,所有其他节点都以某种方式连接到该节点。所以真正的Neo4j根节点只需要连接到这个数据库。这意味着在租户下创建了一个新节点,这个新节点中间有一个到数据库节点的连接,连接名包含在其中。
以下是数据库节点的创建代码
CREATE (db:Database { Name: 'TenantName' } ) " )
我要删除整个租户,这意味着我要删除整个数据库,以及连接到数据库节点的所有节点。
如果使用此简单密码删除节点,则删除该节点,但所有连接节点仍保留在数据库中。
MATCH (db:Database)
WHERE db.Name = 'TeanantName'
DETACH DELETE db
的挑战是:我们不知道任何节点名或数据库节点下的任何连接.
已经回答了这样的问题:
谢谢你们!
发布于 2018-12-09 13:13:30
好吧,这应该很简单。
如果要删除租户的:数据库节点及其所有可访问节点,而不考虑连接它们的节点标签或关系类型,最快的方法将是使用APOC过程中的路径扩展程序与子图中的所有节点匹配并删除它们:
MATCH (db:Database)
WHERE db.Name = 'TenantName'
CALL apoc.path.subgraphNodes(db, {}) YIELD node
DETACH DELETE node
如果有相当多的节点要删除(> 10k左右),那么您可能希望使用apoc.periodic.iterate()对删除进行批处理:
CALL apoc.periodic.iterate("
MATCH (db:Database)
WHERE db.Name = 'TenantName'
CALL apoc.path.subgraphNodes(db, {}) YIELD node
RETURN node",
"DETACH DELETE node",
{}) YIELD total, batches, errorMessages
RETURN total, batches, errorMessages
https://stackoverflow.com/questions/53692494
复制相似问题