我想删除 Neo4j 数据库中的特殊“根”节点。
我已经在 SO 中找到了一些问题/答案,但由于不同的原因,它们没有用。
我们使用 db:DATABASE 节点在 Neo4j 中存储租户数据,所有其他节点都以某种方式连接到该节点。所以真正的 Neo4j 根节点只是连接到这个 DATABASE-s。这意味着在租户下创建一个新节点,这个新节点中间有一个到DATABASE节点的连接,连接名称是CONTAINS。
这里是DATABASE节点的创建代码
CREATE (db:Database { Name: 'TenantName' } ) " )
我要删除整个租户,这意味着我要删除整个 DATABASE 以及连接到 DATABASE 节点的所有节点。
如果用这个简单的密码删除节点,节点被删除,但所有连接的节点仍然保留在数据库中。
MATCH (db:Database)
WHERE db.Name = 'TeanantName'
DETACH DELETE db
挑战是:我们不知道 DATABASE 节点下的任何节点名称或任何连接。
已经回答了 SO 问题:
谢谢你们!
最佳答案
好的,这应该是一个简单的。
如果要删除租户的:Database 节点及其所有可达节点,不考虑连接它们的节点标签或关系类型,最快的方法是使用path expander procs from APOC Procedures匹配子图中的所有节点并删除它们:
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
关于neo4j - 如何删除一个节点和所有关系,以及在 Neo4j 中连接到它的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53692494/