我想删除Neo4j数据库中的特殊“根”节点 .
我已经在SO中找到了一些问题/答案,但由于不同的原因它们没用 .
我们使用db:DATABASE节点将租户数据存储在Neo4j中,并且所有其他节点以某种方式连接到此节点 . 所以真正的Neo4j Root节点只有这个DATABASE-s的连接 . 这意味着在租户下创建新节点时,此新节点中间具有与DATABASE节点的连接,并且连接名称为CONTAINS .
这是DATABASE节点的创建代码
CREATE (db:Database { Name: 'TenantName' } ) " )
我想删除整个租户,这意味着我要删除整个DATABASE,以及连接到DATABASE节点的所有节点 .
如果使用此简单cypher删除节点,则删除该节点,但所有连接的节点仍保留在数据库中 .
MATCH (db:Database)
WHERE db.Name = 'TeanantName'
DETACH DELETE db
The challenge is: We don't know any Node name or any connection under the DATABASE node.
已回答SO问题:
-
How to delete a node and its connected nodes with Neo4j cypher query?在这个答案中,我们知道了这段关系的名称 . "ACTED_IN",并假设我们只有这个连接到已删除的节点 .
-
Neo4j: How to delete all nodes and relationships beyond a node?在这种情况下,我们知道真正的节点结构,但在我们的例子中我们不知道 .
-
cypher delete node and all the list of related node这假定路径中的每个节点不再锚定到路径中的节点以外的任何节点,否则将无法将其删除 . 在我们的案例中并非如此 .
-
Neo4j how to delete nodes recursively from some start node在这种情况下,整个图形结构是已知的 .
感谢你们!
1 回答
好的,这应该是一个简单的 .
如果要删除租户的数据库节点及其中所有可到达的节点,而不考虑连接它们的节点标签或关系类型,最快的方法是使用path expander procs from APOC Procedures匹配子图中的所有节点并删除它们:
如果要删除相当多的节点(> 10k左右),那么您可能希望使用apoc.periodic.iterate()来批量删除: