首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何删除节点和所有关系,以及在Neo4j中连接到的节点

如何删除节点和所有关系,以及在Neo4j中连接到的节点
EN

Stack Overflow用户
提问于 2018-12-09 12:52:22
回答 1查看 599关注 0票数 4

我想删除我的Neo4j数据库中特殊的“根”节点。

我已经在其中找到了一些问题/答案,但由于不同的原因,它们是没有用的。

我们使用db:数据库节点将租户数据存储在Neo4j中,所有其他节点都以某种方式连接到该节点。所以真正的Neo4j根节点只需要连接到这个数据库。这意味着在租户下创建了一个新节点,这个新节点中间有一个到数据库节点的连接,连接名包含在其中。

以下是数据库节点的创建代码

代码语言:javascript
运行
复制
      CREATE (db:Database { Name: 'TenantName' } ) " )

我要删除整个租户,这意味着我要删除整个数据库,以及连接到数据库节点的所有节点。

如果使用此简单密码删除节点,则删除该节点,但所有连接节点仍保留在数据库中。

代码语言:javascript
运行
复制
      MATCH (db:Database)
      WHERE db.Name = 'TeanantName'
      DETACH DELETE db

的挑战是:我们不知道任何节点名或数据库节点下的任何连接.

已经回答了这样的问题:

  1. 如何使用Neo4j密码查询删除节点及其连接节点?在这个答案中,我们知道了关系的名称。"ACTED_IN",并假设我们只有到已删除节点的连接。
  2. Neo4j:如何删除节点以外的所有节点和关系?在这种情况下,我们知道真正的节点结构,但在我们的情况下,我们不知道。
  3. cypher删除节点和所有相关节点列表 --这假设路径中的每个节点不再锚定在路径中的节点之外的任何其他节点上,否则它们将无法被删除。在我们的情况下不是这样的。
  4. Neo4j如何递归地从某个起始节点删除节点在这种情况下,整个图的结构是已知的。

谢谢你们!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-09 13:13:30

好吧,这应该很简单。

如果要删除租户的:数据库节点及其所有可访问节点,而不考虑连接它们的节点标签或关系类型,最快的方法将是使用APOC过程中的路径扩展程序与子图中的所有节点匹配并删除它们:

代码语言:javascript
运行
复制
MATCH (db:Database)
WHERE db.Name = 'TenantName'
CALL apoc.path.subgraphNodes(db, {}) YIELD node
DETACH DELETE node

如果有相当多的节点要删除(> 10k左右),那么您可能希望使用apoc.periodic.iterate()对删除进行批处理:

代码语言:javascript
运行
复制
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
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53692494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档